diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..a8d131a --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,24 @@ +pipeline { + agent any + stages { + stage('Gradle') { + steps { + sh ''' + set +x + chmod +x gradlew + ./gradlew build + ''' + } + } + stage('Archive') { + steps { + archiveArtifacts artifacts: 'build/libs/', followSymlinks: false + } + } + stage('discord') { + steps { + discordSend description: "Build: ${BUILD_NUMBER}", showChangeset: true, result: currentBuild.currentResult, title: currentBuild.fullProjectName, webhookURL: env.discordwebhook + } + } + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 6e29e43..2e550d3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,5 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation - plugins { id("java") - id("com.github.johnrengelman.shadow") version "7.1.0" } group = "com.alttd" @@ -13,7 +10,7 @@ apply() java { toolchain { - languageVersion.set(JavaLanguageVersion.of(17)) + languageVersion.set(JavaLanguageVersion.of(21)) } } @@ -25,25 +22,11 @@ tasks { withType { options.encoding = Charsets.UTF_8.name() } - - shadowJar { - dependsOn(getByName("relocateJars") as ConfigureShadowRelocation) - archiveFileName.set("${project.name}-${project.version}.jar") - minimize() - configurations = listOf(project.configurations.shadow.get()) - } - - build { - dependsOn(shadowJar) - } - - create("relocateJars") { - target = shadowJar.get() - prefix = "${project.name}.lib" - } } dependencies { - compileOnly("com.alttd:Galaxy-API:1.20.4-R0.1-SNAPSHOT") + compileOnly("com.alttd.cosmos:cosmos-api:1.21.6-R0.1-SNAPSHOT") { + isChanging = true + } compileOnly("com.alttd.datalock:api:1.1.0-SNAPSHOT") -} \ No newline at end of file +} diff --git a/gradlew b/gradlew index 4f906e0..1aa94a4 100644 --- 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,67 +17,99 @@ # ############################################################################## -## -## 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/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/. +# ############################################################################## # 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_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"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # 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 @@ -87,9 +119,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 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 @@ -98,88 +130,120 @@ 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. + JAVACMD=java + 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. -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=`expr $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" ;; +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=SC2039,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=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" 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, 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. -# 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" +# For Cygwin or MSYS, switch paths to Windows format before running java +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 + 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 + # 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 +fi + + +# 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, 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 \ + "$@" + +# 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. +# +# 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 107acd3..25da30d 100644 --- 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,13 +41,13 @@ 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. -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 @@ -56,11 +57,11 @@ 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 @@ -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 diff --git a/settings.gradle.kts b/settings.gradle.kts index c3a73bd..7ae6942 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,9 +2,8 @@ rootProject.name = "AQuest" dependencyResolutionManagement { repositories { -// mavenLocal() mavenCentral() - maven("https://repo.destro.xyz/snapshots") // Altitude - Galaxy + maven("https://repo.destro.xyz/snapshots") // Altitude - Cosmos maven("https://jitpack.io") { // Vault content { includeGroup("com.github.milkbowl") } } diff --git a/src/main/java/com/alttd/altitudequests/commands/CommandManager.java b/src/main/java/com/alttd/altitudequests/commands/CommandManager.java index 91b732e..23a5671 100644 --- a/src/main/java/com/alttd/altitudequests/commands/CommandManager.java +++ b/src/main/java/com/alttd/altitudequests/commands/CommandManager.java @@ -49,7 +49,7 @@ public class CommandManager implements CommandExecutor, TabExecutor { subCommand = getSubCommand(args[0]); if (!commandSender.hasPermission(subCommand.getPermission())) { - commandSender.sendMiniMessage(MessagesConfig.NO_PERMISSION, null); + commandSender.sendRichMessage(MessagesConfig.NO_PERMISSION); return true; } @@ -86,4 +86,4 @@ public class CommandManager implements CommandExecutor, TabExecutor { .findFirst() .orElse(null); } -} \ No newline at end of file +} diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java index 8b3342e..c8addb9 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java @@ -24,13 +24,13 @@ public class CommandCreateScruff extends SubCommand { @Override public boolean onCommand(CommandSender commandSender, String[] args) { if (args.length != 7) { - commandSender.sendMiniMessage(getHelpMessage(), null); + commandSender.sendRichMessage(getHelpMessage()); return true; } World world = Bukkit.getServer().getWorld(args[6]); if (world == null) { - commandSender.sendMiniMessage(getHelpMessage(), null); + commandSender.sendRichMessage(getHelpMessage()); return true; } Location location; @@ -38,7 +38,7 @@ public class CommandCreateScruff extends SubCommand { location = new Location(world, Double.parseDouble(args[1]), Double.parseDouble(args[2]), Double.parseDouble(args[3]), Float.parseFloat(args[4]), Float.parseFloat(args[5])); } catch (NumberFormatException exception) { - commandSender.sendMiniMessage("Invalid arguments.", null); + commandSender.sendRichMessage("Invalid arguments."); return true; } Wolf wolf = (Wolf) world.spawnEntity(location, EntityType.WOLF, CreatureSpawnEvent.SpawnReason.CUSTOM); @@ -55,7 +55,7 @@ public class CommandCreateScruff extends SubCommand { UUID uuid = wolf.getUniqueId(); LocalConfig.setActiveNPC(uuid); - commandSender.sendMiniMessage("Spawned Scruff", null); + commandSender.sendRichMessage("Spawned Scruff"); return true; } diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandGetReward.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandGetReward.java index f9a0ba9..8d96d5c 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandGetReward.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandGetReward.java @@ -21,34 +21,34 @@ public class CommandGetReward extends SubCommand { if (args.length != 1) return true; if (!(commandSender instanceof Player player)) { - commandSender.sendMiniMessage(MessagesConfig.NO_CONSOLE, null); + commandSender.sendRichMessage(MessagesConfig.NO_CONSOLE); return true; } Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId()); if (dailyQuest == null) { - player.sendMiniMessage("You have no active quests?", null); + player.sendRichMessage("You have no active quests?"); return true; } if (player.getNearbyEntities(5, 5, 5).stream() .noneMatch(entity -> entity.getUniqueId().equals(LocalConfig.activeNPC))) { - player.sendMiniMessage(MessagesConfig.TOO_FAR_FROM_NPC, Placeholder.component("npc", MiniMessage.miniMessage().deserialize(Config.NPC_NAME))); + player.sendRichMessage(MessagesConfig.TOO_FAR_FROM_NPC, Placeholder.component("npc", MiniMessage.miniMessage().deserialize(Config.NPC_NAME))); return true; } if (!dailyQuest.isDone()) { - player.sendMiniMessage(MessagesConfig.NOT_FINISHED_QUEST, null); + player.sendRichMessage(MessagesConfig.NOT_FINISHED_QUEST); return true; } if (dailyQuest.isRewardReceived()) { - player.sendMiniMessage(MessagesConfig.REWARD_ALREADY_RECEIVED, null); + player.sendRichMessage(MessagesConfig.REWARD_ALREADY_RECEIVED); return true; } for (String command : dailyQuest.getRewardCommand()) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command.replaceAll("", commandSender.getName())); dailyQuest.setRewardReceived(true); - player.sendMiniMessage(MessagesConfig.REWARD_SENT, null); + player.sendRichMessage(MessagesConfig.REWARD_SENT); return true; } diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandHelp.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandHelp.java index 7540635..60d3c63 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandHelp.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandHelp.java @@ -20,12 +20,12 @@ public class CommandHelp extends SubCommand { @Override public boolean onCommand(CommandSender commandSender, String[] args) { - commandSender.sendMiniMessage(MessagesConfig.HELP_MESSAGE_WRAPPER.replaceAll("", commandManager + commandSender.sendRichMessage(MessagesConfig.HELP_MESSAGE_WRAPPER.replaceAll("", commandManager .getSubCommands().stream() .filter(SubCommand::shouldTabComplete) .filter(subCommand -> commandSender.hasPermission(subCommand.getPermission())) .map(SubCommand::getHelpMessage) - .collect(Collectors.joining("\n"))), null); + .collect(Collectors.joining("\n")))); return true; } diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandProgress.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandProgress.java index c728bbd..2cef978 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandProgress.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandProgress.java @@ -21,20 +21,20 @@ public class CommandProgress extends SubCommand { @Override public boolean onCommand(CommandSender commandSender, String[] args) { if (!(commandSender instanceof Player player)) { - commandSender.sendMiniMessage(MessagesConfig.NO_CONSOLE, null); + commandSender.sendRichMessage(MessagesConfig.NO_CONSOLE); return true; } if (!player.hasPlayedBefore()) { - commandSender.sendMiniMessage(getHelpMessage(), null); + commandSender.sendRichMessage(getHelpMessage()); return true; } Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId()); if (dailyQuest == null) { - player.sendMiniMessage("You have no active quests.", null); + player.sendRichMessage("You have no active quests."); return true; } if (dailyQuest.isDone()) { - player.sendMiniMessage("You already completed the daily quest.", null); + player.sendRichMessage("You already completed the daily quest."); return true; } final UUID uniqueId = player.getUniqueId(); diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReRoll.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReRoll.java index b5e6463..abd6004 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReRoll.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReRoll.java @@ -14,26 +14,26 @@ public class CommandReRoll extends SubCommand { @Override public boolean onCommand(CommandSender commandSender, String[] args) { if (!(commandSender instanceof Player player)) { - commandSender.sendMiniMessage(MessagesConfig.NO_CONSOLE, null); + commandSender.sendRichMessage(MessagesConfig.NO_CONSOLE); return true; } if (player.hasPermission("aquest.reroll.on-cooldown")) { - commandSender.sendMiniMessage(MessagesConfig.NO_RE_ROLL_YET, null); + commandSender.sendRichMessage(MessagesConfig.NO_RE_ROLL_YET); return true; } Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId()); if (dailyQuest == null) { - commandSender.sendMiniMessage(MessagesConfig.WAIT_FOR_QUEST, null); + commandSender.sendRichMessage(MessagesConfig.WAIT_FOR_QUEST); return true; } if (dailyQuest.isDone()) { - commandSender.sendMiniMessage(MessagesConfig.QUEST_ALREADY_FINISHED, null); + commandSender.sendRichMessage(MessagesConfig.QUEST_ALREADY_FINISHED); return true; } Quest.createDailyQuest(player); - commandSender.sendMiniMessage(MessagesConfig.QUEST_RE_ROLLED, null); + commandSender.sendRichMessage(MessagesConfig.QUEST_RE_ROLLED); ConsoleCommandSender consoleSender = Bukkit.getConsoleSender(); Bukkit.dispatchCommand(consoleSender, String.format("lp user %s permission settemp aquest.reroll.on-cooldown true 7d", player.getName())); return true; diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReload.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReload.java index bb6485a..10b112d 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReload.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandReload.java @@ -19,7 +19,7 @@ public class CommandReload extends SubCommand { @Override public boolean onCommand(CommandSender commandSender, String[] args) { plugin.reloadConfigs(); - commandSender.sendMiniMessage("Reloaded AltitudeQuests config.", null); + commandSender.sendRichMessage("Reloaded AltitudeQuests config."); return true; } diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java index f2e1065..2901221 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java @@ -21,22 +21,22 @@ public class CommandSetQuest extends SubCommand { @Override public boolean onCommand(CommandSender commandSender, String[] args) { if (args.length != 4) { - commandSender.sendMiniMessage(getHelpMessage(), null); + commandSender.sendRichMessage(getHelpMessage()); return true; } Player player = Bukkit.getServer().getPlayer(args[1]); if (player == null || !player.hasPlayedBefore()) { - commandSender.sendMiniMessage(getHelpMessage(), null); + commandSender.sendRichMessage(getHelpMessage()); return true; } new BukkitRunnable() { @Override public void run() { if (!Quest.loadDailyQuest(args[2], args[3], 0, 0, player.getUniqueId(), -1, false)) - commandSender.sendMiniMessage("Unable to create quest of variant .", + commandSender.sendRichMessage("Unable to create quest of variant .", TagResolver.resolver(Placeholder.parsed("quest", args[2]), Placeholder.parsed("variant", args[3]))); - commandSender.sendMiniMessage("Created quest of variant .", + commandSender.sendRichMessage("Created quest of variant .", TagResolver.resolver(Placeholder.parsed("quest", args[2]), Placeholder.parsed("variant", args[3]))); } diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java index f2e370b..b8137e4 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java @@ -20,22 +20,22 @@ public class CommandTurnIn extends SubCommand { if (args.length != 1) return true; if (!(commandSender instanceof Player player)) { - commandSender.sendMiniMessage(MessagesConfig.NO_CONSOLE, null); + commandSender.sendRichMessage(MessagesConfig.NO_CONSOLE); return true; } Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId()); if (dailyQuest == null || dailyQuest.isDone()) { - player.sendMiniMessage(MessagesConfig.DAILY_ALREADY_DONE, null); + player.sendRichMessage(MessagesConfig.DAILY_ALREADY_DONE); return true; } if (player.getNearbyEntities(5, 5, 5).stream() .noneMatch(entity -> entity.getUniqueId().equals(LocalConfig.activeNPC))) { - player.sendMiniMessage(MessagesConfig.TOO_FAR_FROM_NPC, Placeholder.component("npc", MiniMessage.miniMessage().deserialize(Config.NPC_NAME))); + player.sendRichMessage(MessagesConfig.TOO_FAR_FROM_NPC, Placeholder.component("npc", MiniMessage.miniMessage().deserialize(Config.NPC_NAME))); return true; } dailyQuest.turnIn(player); if (dailyQuest.isDone()) - player.sendMiniMessage(MessagesConfig.FINISHED_QUEST, Placeholder.component("player", player.name())); + player.sendRichMessage(MessagesConfig.FINISHED_QUEST, Placeholder.component("player", player.name())); BookOpener.openBook(player); return true; } diff --git a/src/main/java/com/alttd/altitudequests/events/ItemCaught.java b/src/main/java/com/alttd/altitudequests/events/ItemCaught.java index 2b2cea8..e36881b 100644 --- a/src/main/java/com/alttd/altitudequests/events/ItemCaught.java +++ b/src/main/java/com/alttd/altitudequests/events/ItemCaught.java @@ -7,7 +7,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; @@ -15,8 +14,8 @@ public class ItemCaught implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onItemCaught(PlayerFishEvent event) { - if (event.getCaught() == null || event.getCaught().getType() != EntityType.DROPPED_ITEM) { - return; //Only if an item was caught do further processing. Otherwise error might come up later + if (event.getCaught() == null) { + return; } Player player = event.getPlayer(); Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId()); diff --git a/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java b/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java index 12f5e82..be93a54 100644 --- a/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java +++ b/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java @@ -1,13 +1,18 @@ package com.alttd.altitudequests.events; +import com.alttd.altitudequests.AQuest; import com.alttd.altitudequests.config.Config; import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.util.Logger; import com.alttd.datalock.DataLockAPI; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.boss.KeyedBossBar; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; +import javax.annotation.Nullable; import java.util.UUID; public class LogoutEvent implements Listener { @@ -17,6 +22,20 @@ public class LogoutEvent implements Listener { UUID uuid = event.getPlayer().getUniqueId(); if (Config.DEBUG) Logger.info("Syncing %", event.getPlayer().getName()); + removeBossBar(NamespacedKey.fromString(uuid + "-part-" + "1", AQuest.getInstance())); + removeBossBar(NamespacedKey.fromString(uuid + "-part-" + "2", AQuest.getInstance())); + Quest.unloadUser(uuid).thenAccept(result -> DataLockAPI.get().tryUnlock("aquest:player-data", uuid.toString())); } + + private void removeBossBar(@Nullable NamespacedKey namespacedKey) { + if (namespacedKey == null) { + return; + } + KeyedBossBar bossBar = Bukkit.getBossBar(namespacedKey); + if (bossBar == null) { + return; + } + Bukkit.removeBossBar(namespacedKey); + } } diff --git a/src/main/java/com/alttd/altitudequests/objects/Quest.java b/src/main/java/com/alttd/altitudequests/objects/Quest.java index 402f179..e795835 100644 --- a/src/main/java/com/alttd/altitudequests/objects/Quest.java +++ b/src/main/java/com/alttd/altitudequests/objects/Quest.java @@ -93,8 +93,8 @@ public abstract class Quest { this.amount = variant.calculateAmount(loadQuestsDoneThisMonth(uuid)); else this.amount = amount; - this.barProgressOne = new AutoHideBossBar(player, variant, "1", "Step One Progress", BarColor.GREEN); - this.barProgressTwo = new AutoHideBossBar(player, variant, "2", "Step Two Progress", BarColor.PURPLE); + this.barProgressOne = new AutoHideBossBar(player, "1", "Step One Progress", BarColor.GREEN); + this.barProgressTwo = new AutoHideBossBar(player, "2", "Step Two Progress", BarColor.PURPLE); } private int loadQuestsDoneThisMonth(UUID uuid) { @@ -116,7 +116,7 @@ public abstract class Quest { public static void createDailyQuest(Player player) { if (possibleQuests.isEmpty()) { - player.sendMiniMessage("Unable to create quest, no quests in config", null); + player.sendRichMessage("Unable to create quest, no quests in config"); return; } @@ -126,11 +126,11 @@ public abstract class Quest { putDailyQuest(player.getUniqueId(), constructor.newInstance(player)); } catch (InvocationTargetException | IllegalAccessException | InstantiationException | NoSuchMethodException e) { - player.sendMiniMessage("Unable to create quest, contact an admin", null); + player.sendRichMessage("Unable to create quest, contact an admin"); Logger.throwing(Quest.class.getName(), "createDailyQuest", e); Logger.severe("% does not have a constructor with a Player input or has improper access.", questClass.getName()); } catch (Exception e) { - player.sendMiniMessage("Unable to create quest, contact an admin", null); + player.sendRichMessage("Unable to create quest, contact an admin"); Logger.throwing(Quest.class.getName(), "createDailyQuest", e); Logger.severe("% could not be created due to invalid namespace key or variant.", questClass.getName()); } diff --git a/src/main/java/com/alttd/altitudequests/util/AutoHideBossBar.java b/src/main/java/com/alttd/altitudequests/util/AutoHideBossBar.java index 0d790d0..dc05b4a 100644 --- a/src/main/java/com/alttd/altitudequests/util/AutoHideBossBar.java +++ b/src/main/java/com/alttd/altitudequests/util/AutoHideBossBar.java @@ -2,17 +2,18 @@ package com.alttd.altitudequests.util; import com.alttd.altitudequests.AQuest; import com.alttd.altitudequests.config.Config; -import com.alttd.altitudequests.objects.Variant; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; +import org.bukkit.boss.KeyedBossBar; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import java.time.Instant; import java.util.HashMap; +import java.util.Objects; public class AutoHideBossBar { @@ -20,17 +21,19 @@ public class AutoHideBossBar { private final BossBar bossBar; - public AutoHideBossBar(Player player, Variant variant, String part, String title, BarColor barColor) throws Exception { - NamespacedKey namespacedKeyOne = NamespacedKey.fromString(player.getUniqueId() + variant.getInternalName().toLowerCase() + part, AQuest.getInstance()); + public AutoHideBossBar(Player player, String part, String title, BarColor barColor) throws Exception { + NamespacedKey namespacedKeyOne = NamespacedKey.fromString(player.getUniqueId() + "-part-" + part, AQuest.getInstance()); if (namespacedKeyOne == null) { Logger.warning("Unable to create nameSpacedKey with suffix % for quest for %", part, player.getName()); throw new Exception("Failed to create namespace key"); } - this.bossBar = Bukkit.createBossBar( + KeyedBossBar retrievedBossBar = Bukkit.getBossBar(namespacedKeyOne); + this.bossBar = Objects.requireNonNullElseGet(retrievedBossBar, () -> Bukkit.createBossBar( namespacedKeyOne, title, barColor, - BarStyle.SOLID); + BarStyle.SOLID)); + bossBar.setVisible(false); bossBar.addPlayer(player); }