Compare commits

...

7 Commits

Author SHA1 Message Date
akastijn ff4fb6c1ae Update to java 21, 1.21 with cosmso 2025-06-28 03:33:39 +02:00
Teriuihi ffd67eada8 Update file paths in quest configurations
The file paths previously pointed to the user home directory. This commit adjusts the paths to consistently use a mount point directory instead. The change affects the 'QuestsConfig', 'Config', 'MessagesConfig', and 'DatabaseConfig' classes.
2024-07-20 01:46:33 +02:00
Teriuihi 81ed73fbd1 Add new responses to handle quest reroll situations
This commit fixes a bug where the quest reroll feature could be used repeatedly without restrictions. Now, appropriate responses will be given in cases where the quest is still loading or if the daily quest has already been completed. This ensures that the player cannot misuse the reroll functionality.
2024-04-18 20:49:05 +02:00
Teriuihi 34c5252db4 Refactor quest saving, update Galaxy-API version
Quest saving logic was abstracted into a saveQuest method in the Quest class to avoid redundancy. This change was reflected in OtherQuest, MineQuest, BreedMobsQuest, KillMobsQuest and CollectDropsQuest classes. Additionally, the Galaxy-API version was updated in the build.gradle.kts file.
2024-04-13 20:50:56 +02:00
Teriuihi 3bb822b41c Optimize and cleanup various classes
Reformatted several classes for optimization purposes. This includes removing unnecessary try-catch blocks, redundant initializers and imports, and condensing confirmation checks. Additionally, updated the `Database` class's `createUserPointsTable` and `createQuestLogTable` methods to use try-with-resources to ensure proper resource management.
2024-04-13 20:43:37 +02:00
Teriuihi c6b186e2c6 Remove commented code and ensure async execution in specific methods
All code sections that were commented out are now completely removed, resulting in a cleaner and more efficient codebase. In addition, the method 'unloadUser' in the Quest class, which previously only included a comment suggesting it should be run as an async operation, is now forced to run in an asynchronous manner, potentially improving performance.
2024-04-13 20:32:56 +02:00
Teriuihi 46bfb4fd65 Replace printStackTrace with Logger.throwing in various classes
The changes made in these classes are intended to improve error handling and visibility. Instead of simply printing the StackTrace, the Logger.throwing method is now used to send error messages to the logger in a more controlled manner. This should facilitate better error tracking and resolution. The affected classes include database, configuration, and quest implementation classes.
2024-04-13 20:27:33 +02:00
36 changed files with 467 additions and 579 deletions

24
Jenkinsfile vendored Normal file
View File

@ -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
}
}
}
}

View File

@ -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<JavaLibraryPlugin>()
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
languageVersion.set(JavaLanguageVersion.of(21))
}
}
@ -25,25 +22,11 @@ tasks {
withType<Javadoc> {
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<ConfigureShadowRelocation>("relocateJars") {
target = shadowJar.get()
prefix = "${project.name}.lib"
}
}
dependencies {
compileOnly("com.alttd:Galaxy-API:1.19-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")
}
}

294
gradlew vendored
View File

@ -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" "$@"

35
gradlew.bat vendored
View File

@ -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

View File

@ -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") }
}

View File

@ -72,12 +72,7 @@ public final class AQuest extends JavaPlugin {
getServer().getPluginManager().registerEvents(new DonNotMessWithNPC(), this);
getServer().getPluginManager().registerEvents(new DataLock(), this);
getServer().getPluginManager().registerEvents(new ItemCaught(), this);
// getServer().getPluginManager().registerEvents(new PotionBrewingStarted(), this);
// getServer().getPluginManager().registerEvents(new PotionBrewingFinished(), this);
getServer().getPluginManager().registerEvents(new FinishedRaid(), this);
// getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data");
// getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener());
}
private static int yearDay = Utilities.getYearDay();

View File

@ -11,7 +11,6 @@ import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class CommandManager implements CommandExecutor, TabExecutor {
private final List<SubCommand> subCommands;
@ -50,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;
}
@ -67,7 +66,7 @@ public class CommandManager implements CommandExecutor, TabExecutor {
.filter(subCommand -> commandSender.hasPermission(subCommand.getPermission()))
.map(SubCommand::getName)
.filter(name -> args.length == 0 || name.startsWith(args[0]))
.collect(Collectors.toList())
.toList()
);
} else {
SubCommand subCommand = getSubCommand(args[0]);
@ -87,4 +86,4 @@ public class CommandManager implements CommandExecutor, TabExecutor {
.findFirst()
.orElse(null);
}
}
}

View File

@ -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("<red>Invalid arguments.</red>", null);
commandSender.sendRichMessage("<red>Invalid arguments.</red>");
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("<green>Spawned Scruff</green>", null);
commandSender.sendRichMessage("<green>Spawned Scruff</green>");
return true;
}

View File

@ -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("<red>You have no active quests?</red>", null);
player.sendRichMessage("<red>You have no active quests?</red>");
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("<player>", commandSender.getName()));
dailyQuest.setRewardReceived(true);
player.sendMiniMessage(MessagesConfig.REWARD_SENT, null);
player.sendRichMessage(MessagesConfig.REWARD_SENT);
return true;
}

View File

@ -20,12 +20,12 @@ public class CommandHelp extends SubCommand {
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
commandSender.sendMiniMessage(MessagesConfig.HELP_MESSAGE_WRAPPER.replaceAll("<commands>", commandManager
commandSender.sendRichMessage(MessagesConfig.HELP_MESSAGE_WRAPPER.replaceAll("<commands>", 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;
}

View File

@ -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 == null || !player.hasPlayedBefore()) {
commandSender.sendMiniMessage(getHelpMessage(), null);
if (!player.hasPlayedBefore()) {
commandSender.sendRichMessage(getHelpMessage());
return true;
}
Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
if (dailyQuest == null) {
player.sendMiniMessage("<red>You have no active quests.</red>", null);
player.sendRichMessage("<red>You have no active quests.</red>");
return true;
}
if (dailyQuest.isDone()) {
player.sendMiniMessage("<green>You already completed the daily quest.</green>", null);
player.sendRichMessage("<green>You already completed the daily quest.</green>");
return true;
}
final UUID uniqueId = player.getUniqueId();

View File

@ -14,17 +14,28 @@ 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.sendRichMessage(MessagesConfig.WAIT_FOR_QUEST);
return true;
}
if (dailyQuest.isDone()) {
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, "lp user %s permission settemp aquest.reroll.on-cooldown true 7d");
Bukkit.dispatchCommand(consoleSender, String.format("lp user %s permission settemp aquest.reroll.on-cooldown true 7d", player.getName()));
return true;
}

View File

@ -19,7 +19,7 @@ public class CommandReload extends SubCommand {
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
plugin.reloadConfigs();
commandSender.sendMiniMessage("<green>Reloaded AltitudeQuests config.</green>", null);
commandSender.sendRichMessage("<green>Reloaded AltitudeQuests config.</green>");
return true;
}

View File

@ -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("<red>Unable to create quest <quest> of variant <variant>.</red>",
commandSender.sendRichMessage("<red>Unable to create quest <quest> of variant <variant>.</red>",
TagResolver.resolver(Placeholder.parsed("quest", args[2]),
Placeholder.parsed("variant", args[3])));
commandSender.sendMiniMessage("<green>Created quest <quest> of variant <variant>.</green>",
commandSender.sendRichMessage("<green>Created quest <quest> of variant <variant>.</green>",
TagResolver.resolver(Placeholder.parsed("quest", args[2]),
Placeholder.parsed("variant", args[3])));
}
@ -55,7 +55,7 @@ public class CommandSetQuest extends SubCommand {
switch (args.length) {
case 2 -> res.addAll(Bukkit.getServer().getOnlinePlayers().stream()
.map(Player::getName)
.collect(Collectors.toList()));
.toList());
case 3 -> res.addAll(Quest.getTypes());
case 4 -> {
switch (args[2].toLowerCase()) {

View File

@ -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;
}

View File

@ -54,8 +54,7 @@ abstract class AbstractConfig {
} catch (InvocationTargetException ex) {
throw new RuntimeException(ex.getCause());
} catch (Exception ex) {
Logger.severe("Error invoking %.", method.toString());
ex.printStackTrace();
Logger.throwing(AbstractConfig.class.getName(), "readConfig", ex);
}
}
}
@ -69,7 +68,7 @@ abstract class AbstractConfig {
yaml.save(file);
} catch (IOException ex) {
Logger.severe("Could not save %.", file.toString());
ex.printStackTrace();
Logger.throwing(AbstractConfig.class.getName(), "save", ex);
}
}

View File

@ -8,7 +8,7 @@ public final class Config extends AbstractConfig {
static Config config;
static int version;
public Config() {
super(new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs" + File.separator + "AltitudeQuests"), "config.yml");
super(new File(File.separator + "mnt" + File.separator + "configs" + File.separator + "AltitudeQuests"), "config.yml");
}
public static void reload() {
config = new Config();

View File

@ -6,7 +6,7 @@ public class DatabaseConfig extends AbstractConfig {
static DatabaseConfig config;
public DatabaseConfig() {
super(new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs"
super(new File(File.separator + "mnt" + File.separator + "configs"
+ File.separator + "AltitudeQuests"), "database.yml");
}

View File

@ -7,7 +7,7 @@ public class MessagesConfig extends AbstractConfig{
static MessagesConfig config;
public MessagesConfig() {
super(new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs"
super(new File(File.separator + "mnt" + File.separator + "configs"
+ File.separator + "AltitudeQuests"), "messages.yml");
}
@ -29,6 +29,7 @@ public class MessagesConfig extends AbstractConfig{
RELOAD_HELP_MESSAGE = config.getString("help.reload", RELOAD_HELP_MESSAGE);
SET_QUEST_HELP = config.getString("help.set-quest", SET_QUEST_HELP);
CREATE_SCRUFF_MESSAGE = config.getString("help.help-wrapper", CREATE_SCRUFF_MESSAGE);
RE_ROLL_HELP = config.getString("help.re-roll-help", RE_ROLL_HELP);
}
@ -41,6 +42,9 @@ public class MessagesConfig extends AbstractConfig{
public static String NOT_FINISHED_QUEST = "<red>You have not finished this quest yet.</red>";
public static String QUEST_RE_ROLLED = "<white>[<gold>Mascot</gold>] <light_purple>Scruff</light_purple><gray>:</gray> <green>I see, that last quest was too much for you, that's okay I have given you another one!</green></white>";
public static String NO_RE_ROLL_YET = "<white>[<gold>Mascot</gold>] <light_purple>Scruff</light_purple><gray>:</gray> <green>Sorry, you already rerolled your quest within the last 7 days. I can't give you a different quest quite yet.</green></white>";
public static String WAIT_FOR_QUEST = "<white>[<gold>Mascot</gold>] <light_purple>Scruff</light_purple><gray>:</gray> <green>You don't seem to have any quest, please wait for it to load!</green></white>";
public static String QUEST_ALREADY_FINISHED = "<white>[<gold>Mascot</gold>] <light_purple>Scruff</light_purple><gray>:</gray> <green>You already finished your quest today. You will get a new one tomorrow.</green></white>";
private static void loadMessages() {
TOO_FAR_FROM_NPC = config.getString("messages.too-far-from-npc", TOO_FAR_FROM_NPC);
DAILY_ALREADY_DONE = config.getString("messages.daily-already-done", DAILY_ALREADY_DONE);
@ -51,6 +55,8 @@ public class MessagesConfig extends AbstractConfig{
NOT_FINISHED_QUEST = config.getString("messages.not-finished-quest", NOT_FINISHED_QUEST);
QUEST_RE_ROLLED = config.getString("messages.re-rolled-quest", QUEST_RE_ROLLED);
NO_RE_ROLL_YET = config.getString("messages.no-re-rolled-yet", NO_RE_ROLL_YET);
WAIT_FOR_QUEST = config.getString("messages.wait-for-yet", WAIT_FOR_QUEST);
QUEST_ALREADY_FINISHED = config.getString("messages.quest-already-finished", QUEST_ALREADY_FINISHED);
}
public static String NO_PERMISSION = "<red>You do not have permission to do that.</red>";

View File

@ -1,4 +1,4 @@
package com.alttd.altitudequests.config;;
package com.alttd.altitudequests.config;
import com.alttd.altitudequests.objects.variants.BreedMobsQuestObject;
import com.alttd.altitudequests.objects.variants.CollectDropsQuestObject;
@ -19,7 +19,7 @@ public class QuestsConfig extends AbstractConfig {
static QuestsConfig config;
public QuestsConfig() {
super(new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs"
super(new File(File.separator + "mnt" + File.separator + "configs"
+ File.separator + "AltitudeQuests"), "quests.yml");
}
@ -28,7 +28,7 @@ public class QuestsConfig extends AbstractConfig {
config.readConfig(QuestsConfig.class, null);
}
public static List<MineQuestObject> MINE_QUESTS = new ArrayList<>();
public static final List<MineQuestObject> MINE_QUESTS = new ArrayList<>();
public static String MINE_QUEST_NAME = "<green>Mining</green>";
public static String MINE_STEP_1 = "Mined";
public static String MINE_STEP_2 = "Turned in";
@ -67,7 +67,7 @@ public class QuestsConfig extends AbstractConfig {
Logger.info("Loaded Mine quest " + key);
}
catch (Exception e) {
e.printStackTrace();
Logger.throwing(QuestsConfig.class.getName(), "loadMineQuest", e);
}
}
MINE_QUEST_NAME = config.getString("mining.name", MINE_QUEST_NAME);
@ -77,7 +77,7 @@ public class QuestsConfig extends AbstractConfig {
MINE_COMMANDS = config.getStringList("mining.commands", MINE_COMMANDS);
}
public static List<KillMobsQuestObject> KILL_MOB_QUEST = new ArrayList<>();
public static final List<KillMobsQuestObject> KILL_MOB_QUEST = new ArrayList<>();
public static String KILL_MOB_QUEST_NAME = "<green>Kill mobs</green>";
public static String KILL_MOB_STEP_1 = "Killed";
public static String KILL_MOB_STEP_2 = "Confirmed";
@ -106,7 +106,7 @@ public class QuestsConfig extends AbstractConfig {
Logger.info("Loaded Kill mob quest " + key);
}
catch (Exception e) {
e.printStackTrace();
Logger.throwing(QuestsConfig.class.getName(), "loadKillMobQuest", e);
}
}
KILL_MOB_QUEST_NAME = config.getString("kill_mobs.name", KILL_MOB_QUEST_NAME);
@ -116,7 +116,7 @@ public class QuestsConfig extends AbstractConfig {
KILL_MOB_COMMANDS = config.getStringList("kill_mobs.commands", KILL_MOB_COMMANDS);
}
public static List<CollectDropsQuestObject> COLLECT_DROPS_QUEST = new ArrayList<>();
public static final List<CollectDropsQuestObject> COLLECT_DROPS_QUEST = new ArrayList<>();
public static String COLLECT_DROPS_QUEST_NAME = "<green>Collect drops quest</green>";
public static String COLLECT_DROPS_STEP_1 = "Obtained";
public static String COLLECT_DROPS_STEP_2 = "Turned in";
@ -145,7 +145,7 @@ public class QuestsConfig extends AbstractConfig {
Logger.info("Loaded Collect drops quest " + key);
}
catch (Exception e) {
e.printStackTrace();
Logger.throwing(QuestsConfig.class.getName(), "loadCollectQuest", e);
}
}
COLLECT_DROPS_QUEST_NAME = config.getString("collect_drops.name", COLLECT_DROPS_QUEST_NAME);
@ -155,7 +155,7 @@ public class QuestsConfig extends AbstractConfig {
COLLECT_DROPS_COMMANDS = config.getStringList("collect_drops.commands", COLLECT_DROPS_COMMANDS);
}
public static List<OtherQuestObject> OTHER_QUEST = new ArrayList<>();
public static final List<OtherQuestObject> OTHER_QUEST = new ArrayList<>();
public static String OTHER_QUEST_NAME = "<green>Other quest</green>";
public static String OTHER_TURN_IN = "<gold>Click here to turn in your <item></gold>";
public static List<String> OTHER_COMMANDS = List.of("broadcast <player> Finished their daily quest!");
@ -195,7 +195,7 @@ public class QuestsConfig extends AbstractConfig {
Logger.info("Loaded Collect drops quest " + key);
}
catch (Exception e) {
e.printStackTrace();
Logger.throwing(QuestsConfig.class.getName(), "loadOtherQuests", e);
}
}
OTHER_QUEST_NAME = config.getString("other.name", OTHER_QUEST_NAME);
@ -203,7 +203,7 @@ public class QuestsConfig extends AbstractConfig {
OTHER_COMMANDS = config.getStringList("other.commands", OTHER_COMMANDS);
}
public static List<BreedMobsQuestObject> BREED_MOB_QUEST = new ArrayList<>();
public static final List<BreedMobsQuestObject> BREED_MOB_QUEST = new ArrayList<>();
public static String BREED_MOB_QUEST_NAME = "<green>Breed mobs quest</green>";
public static String BREED_STEP_1 = "Bred";
public static String BREED_STEP_2 = "Confirmed";
@ -232,7 +232,7 @@ public class QuestsConfig extends AbstractConfig {
Logger.info("Loaded Breed mob quest " + key);
}
catch (Exception e) {
e.printStackTrace();
Logger.throwing(QuestsConfig.class.getName(), "loadBreedMobQuest", e);
}
}
BREED_MOB_QUEST_NAME = config.getString("breed_mobs.name", BREED_MOB_QUEST_NAME);

View File

@ -10,6 +10,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Database {
@ -32,7 +33,7 @@ public class Database {
try {
openConnection();
} catch (SQLException e) {
e.printStackTrace();
Logger.throwing(Database.class.getName(), "init", e);
}
//Run all create table functions
@ -45,8 +46,7 @@ public class Database {
} catch (InvocationTargetException ex) {
throw new RuntimeException(ex.getCause());
} catch (Exception ex) {
Logger.severe("Error invoking %.", method.toString());
ex.printStackTrace();
Logger.throwing(Database.class.getName(), "init", ex);
}
}
}
@ -69,7 +69,7 @@ public class Database {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
Logger.throwing(Database.class.getName(), "openConnection", e);
}
connection = DriverManager.getConnection(
@ -83,27 +83,27 @@ public class Database {
try {
openConnection();
} catch (SQLException e) {
e.printStackTrace();
Logger.throwing(Database.class.getName(), "getConnection", e);
}
return connection;
}
private static void createUserPointsTable() {
try {
String sql = "CREATE TABLE IF NOT EXISTS generic_quest_progress(" +
"year_day INT NOT NULL, " +
"uuid VARCHAR(36) NOT NULL, " +
"quest VARCHAR(36) NOT NULL, " +
"quest_variant VARCHAR(36) NOT NULL, " +
"step_1_progress INT NOT NULL, " +
"step_2_progress INT NOT NULL, " +
"amount INT NOT NULL, " +
"reward_received BIT(1) NOT NULL, " +
"PRIMARY KEY (uuid)" +
")";
getDatabase().getConnection().prepareStatement(sql).executeUpdate();
String sql = "CREATE TABLE IF NOT EXISTS generic_quest_progress(" +
"year_day INT NOT NULL, " +
"uuid VARCHAR(36) NOT NULL, " +
"quest VARCHAR(36) NOT NULL, " +
"quest_variant VARCHAR(36) NOT NULL, " +
"step_1_progress INT NOT NULL, " +
"step_2_progress INT NOT NULL, " +
"amount INT NOT NULL, " +
"reward_received BIT(1) NOT NULL, " +
"PRIMARY KEY (uuid)" +
")";
try (PreparedStatement preparedStatement = getDatabase().getConnection().prepareStatement(sql)) {
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
Logger.throwing(Database.class.getName(), "createUserPointsTable", e);
Logger.severe("Error while trying to create user point table");
Logger.severe("Shutting down AltitudeQuests");
Bukkit.getPluginManager().disablePlugin(AQuest.getInstance());
@ -111,19 +111,18 @@ public class Database {
}
private static void createQuestLogTable() {
try {
String sql = "CREATE TABLE IF NOT EXISTS quest_log(" +
"uuid VARCHAR(36) NOT NULL, " +
"year INT NOT NULL, " +
"month INT NOT NULL, " +
"day INT NOT NULL, " +
"PRIMARY KEY (uuid, year, month, day)" +
")";
getDatabase().getConnection().prepareStatement(sql).executeUpdate();
String sql = "CREATE TABLE IF NOT EXISTS quest_log(" +
"uuid VARCHAR(36) NOT NULL, " +
"year INT NOT NULL, " +
"month INT NOT NULL, " +
"day INT NOT NULL, " +
"PRIMARY KEY (uuid, year, month, day)" +
")";
try (PreparedStatement preparedStatement = getDatabase().getConnection().prepareStatement(sql)) {
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
Logger.severe("Error while trying to create quest log table");
Logger.severe("Shutting down AltitudeQuests");
Logger.throwing(Database.class.getName(), "createQuestLogTable", e);
Logger.severe("Error while trying to create quest log table\nShutting down AltitudeQuests");
Bukkit.getPluginManager().disablePlugin(AQuest.getInstance());
}
}

View File

@ -30,9 +30,7 @@ public class DataLock implements Listener {
return;
new LoadUser(uuid).runTaskAsynchronously(AQuest.getInstance());
}
case QUEUE_LOCK_FAILED -> {
Logger.warning("Unable to queue lock");
}
case QUEUE_LOCK_FAILED -> Logger.warning("Unable to queue lock");
case TRY_UNLOCK_RESULT -> {
if (event.getResult())
return;

View File

@ -1,7 +1,6 @@
package com.alttd.altitudequests.events;
import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
import com.alttd.altitudequests.objects.quests.OtherQuest;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@ -9,7 +8,6 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerBucketEntityEvent;
import org.bukkit.inventory.ItemStack;
public class EntityBucketed implements Listener {
@ -20,10 +18,8 @@ public class EntityBucketed implements Listener {
if (dailyQuest == null || dailyQuest.isDone())
return;
if (dailyQuest instanceof OtherQuest otherQuest) {
ItemStack itemStack = event.getEntityBucket();
Entity entity = event.getEntity();
if (itemStack != null && entity != null)
otherQuest.bucket(itemStack, entity);
otherQuest.bucket(entity);
}
}

View File

@ -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());

View File

@ -5,15 +5,14 @@ import com.alttd.altitudequests.config.Config;
import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.util.Logger;
import com.alttd.datalock.DataLockAPI;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
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 org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import javax.annotation.Nullable;
import java.util.UUID;
public class LogoutEvent implements Listener {
@ -21,14 +20,22 @@ public class LogoutEvent implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
new BukkitRunnable() {
@Override
public void run() {
if (Config.DEBUG)
Logger.info("Syncing %", event.getPlayer().getName());
Quest.unloadUser(uuid);
DataLockAPI.get().tryUnlock("aquest:player-data", uuid.toString());
}
}.runTaskAsynchronously(AQuest.getInstance());
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);
}
}

View File

@ -1,98 +0,0 @@
//package com.alttd.altitudequests.events;
//
//import com.alttd.altitudequests.AQuest;
//import com.alttd.altitudequests.config.Config;
//import com.alttd.altitudequests.database.Database;
//import com.alttd.altitudequests.objects.Quest;
//import com.alttd.altitudequests.util.Logger;
//import com.alttd.altitudequests.util.Utilities;
//import com.google.common.io.ByteArrayDataInput;
//import com.google.common.io.ByteStreams;
//import org.bukkit.Bukkit;
//import org.bukkit.entity.Player;
//import org.bukkit.scheduler.BukkitRunnable;
//import org.jetbrains.annotations.NotNull;
//
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.util.UUID;
//
//public class PluginMessageListener implements org.bukkit.plugin.messaging.PluginMessageListener {
//
// @Override
// public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] bytes) {
// if (!channel.equals("aquest:player-data")) {
// Logger.warning("Received plugin message on invalid channel");
// return;
// }
// ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
// switch (in.readUTF()) {
// case "try-lock-result" -> {
// if (!in.readBoolean()) {
// Logger.warning("Unable to lock row");
// return;
// }
// UUID uuid = UUID.fromString(in.readUTF());
// if (Config.DEBUG)
// Logger.info("Received positive log result for %, loading user", uuid.toString());
// loadUser(uuid);
// }
// case "queue-lock-failed" -> Logger.warning("Encountered uuid that was locked and had a lock queued: %, lock is from %", in.readUTF(), in.readUTF());
// case "try-unlock-result" -> {
// if (in.readBoolean()) {
// // ignore?
// return;
// }
// Logger.severe("Unable to unlock %.", in.readUTF());
// }
// case "locked-queue-lock" -> {
// if (!in.readBoolean()) {
// Logger.warning("Got false back from locked queue lock");
// return;
// }
// UUID uuid = UUID.fromString(in.readUTF());
// if (Config.DEBUG)
// Logger.info("Received positive log result for %, loading user", uuid.toString());
// loadUser(uuid);
// }
// case "check-lock-result" -> {
//
// }
// }
// }
//
// private void loadUser(UUID uuid) {
// new BukkitRunnable() {
// @Override
// public void run() {
// String sql = "SELECT * FROM generic_quest_progress WHERE uuid = ?";
// try {
// PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
// statement.setString(1, uuid.toString());
// ResultSet resultSet = statement.executeQuery();
// if (resultSet.next() && resultSet.getInt("year_day") == Utilities.getYearDay()) {
// if (Quest.loadDailyQuest(
// resultSet.getString("quest"),
// resultSet.getString("quest_variant"),
// resultSet.getInt("step_1_progress"),
// resultSet.getInt("step_2_progress"),
// uuid,
// resultSet.getInt("amount"),
// resultSet.getInt("reward_received") == 1)) {
// if (Config.DEBUG)
// Logger.info("Loading daily quest for %", uuid.toString());
// return;
// } else
// Logger.warning("Unable to load quest for %, creating new quest...", uuid.toString());
// }
// } catch (SQLException exception) {
// exception.printStackTrace();
// }
// if (Config.DEBUG)
// Logger.info("Creating new daily quest for %", uuid.toString());
// Quest.createDailyQuest(Bukkit.getPlayer(uuid));
// }
// }.runTaskAsynchronously(AQuest.getInstance());
// }
//}

View File

@ -22,6 +22,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
public abstract class Quest {
@ -92,14 +93,13 @@ 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) {
String sql = "SELECT COUNT(uuid) AS total FROM quest_log WHERE uuid = ? AND year = ? AND month = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
statement.setString(1, uuid.toString());
Calendar instance = Calendar.getInstance();
instance.setTime(new Date());
@ -109,14 +109,14 @@ public abstract class Quest {
if (resultSet.next())
return resultSet.getInt("total");
} catch (SQLException exception) {
exception.printStackTrace();
Logger.throwing(Quest.class.getName(), "loadQuestsDoneThisMonth", exception);
}
return 0;
}
public static void createDailyQuest(Player player) {
if (possibleQuests.size() == 0) {
player.sendMiniMessage("<red>Unable to create quest, no quests in config</red>", null);
if (possibleQuests.isEmpty()) {
player.sendRichMessage("<red>Unable to create quest, no quests in config</red>");
return;
}
@ -126,27 +126,21 @@ public abstract class Quest {
putDailyQuest(player.getUniqueId(), constructor.newInstance(player));
} catch (InvocationTargetException | IllegalAccessException | InstantiationException |
NoSuchMethodException e) {
player.sendMiniMessage("<red>Unable to create quest, contact an admin</red>", null);
e.printStackTrace();
player.sendRichMessage("<red>Unable to create quest, contact an admin</red>");
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("<red>Unable to create quest, contact an admin</red>", null);
e.printStackTrace();
player.sendRichMessage("<red>Unable to create quest, contact an admin</red>");
Logger.throwing(Quest.class.getName(), "createDailyQuest", e);
Logger.severe("% could not be created due to invalid namespace key or variant.", questClass.getName());
}
}
// public static void setActiveWeeklyQuest(Quest newQuest) {
// Quest.weeklyQuest = newQuest;
// }
// private static final HashSet<UUID> queriedUsers = new HashSet<>();
public static void tryLoadDailyQuest(UUID uuid) {
// if (queriedUsers.contains(uuid))
// return;
if (dailyQuestContainsKey(uuid))
return;
// queriedUsers.add(uuid);
new BukkitRunnable() {
@Override
public void run() {
@ -157,12 +151,14 @@ public abstract class Quest {
}.runTaskAsynchronously(AQuest.getInstance());
}
public static void unloadUser(UUID uuid) { //Pls only run async
// queriedUsers.remove(uuid);
Quest quest = removeDailyQuest(uuid);
if (quest == null)
return;
quest.save();
public static CompletableFuture<Boolean> unloadUser(UUID uuid) {
return CompletableFuture.supplyAsync(() ->{
Quest quest = removeDailyQuest(uuid);
if (quest == null)
return false;
quest.save();
return true;
});
}
public static void saveAll() {
@ -198,7 +194,7 @@ public abstract class Quest {
putDailyQuest(uuid, quest1);
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException |
InvocationTargetException e) {
e.printStackTrace();
Logger.throwing(Quest.class.getName(), "loadDailyQuest", e);
return false;
}
return true;
@ -225,7 +221,7 @@ public abstract class Quest {
public abstract TagResolver getTagResolvers();
public abstract int turnIn(Player player);
public abstract void turnIn(Player player);
public abstract Component getDisplayName();
@ -263,12 +259,11 @@ public abstract class Quest {
}
private void saveDone() {
try {
String sql = "INSERT INTO quest_log " +
"(uuid, year, month, day) " +
"VALUES (?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE uuid = ?";
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
String sql = "INSERT INTO quest_log " +
"(uuid, year, month, day) " +
"VALUES (?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE uuid = ?";
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
String uuidString = uuid.toString();
@ -281,9 +276,8 @@ public abstract class Quest {
if (Config.DEBUG)
Logger.info("% finished their quest", uuidString);
} catch (SQLException e) {
e.printStackTrace();
Logger.severe("Error while trying to create quest log table");
Logger.severe("Shutting down AltitudeQuests");
Logger.throwing(Quest.class.getName(), "saveDone", e);
Logger.severe("Error while trying to create quest log table\nShutting down AltitudeQuests");
Bukkit.getPluginManager().disablePlugin(AQuest.getInstance());
}
}
@ -337,4 +331,26 @@ public abstract class Quest {
public int getAmount() {
return amount;
}
protected void saveQuest(PreparedStatement statement, Variant variant) throws SQLException {
int yearDay = Utilities.getYearDay();
if (Config.DEBUG)
Logger.info("Saving user for year day %.", String.valueOf(yearDay));
statement.setInt(1, yearDay);
statement.setString(2, getUuid().toString());
statement.setString(3, this.getClass().getSimpleName());
statement.setString(4, variant.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setInt(7, getAmount());
statement.setInt(8, isRewardReceived() ? 1 : 0);
statement.setString(9, this.getClass().getSimpleName());
statement.setString(10, variant.getInternalName());
statement.setInt(11, getStep1());
statement.setInt(12, getStep2());
statement.setInt(13, yearDay);
statement.setInt(14, getAmount());
statement.setInt(15, isRewardReceived() ? 1 : 0);
statement.execute();
}
}

View File

@ -27,13 +27,12 @@ public class BreedMobsQuest extends Quest {
public BreedMobsQuest(Player player) throws Exception {
super(player, 0, 0,
QuestsConfig.BREED_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.BREED_MOB_QUEST.size() - 1)), -1, false);
if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject)
this.breedMobsQuestObject = breedMobsQuestObject;
if (getVariant() instanceof BreedMobsQuestObject questObject)
this.breedMobsQuestObject = questObject;
else
this.breedMobsQuestObject = null;
if (breedMobsQuestObject == null) {
Logger.warning("Tried to create breedMobQuest but unable to find variant: %.", "unknown");
return;
if (this.breedMobsQuestObject == null) {
Logger.warning("Tried to create breedMobQuest but unable to find variant: %s.", "unknown");
}
}
@ -41,8 +40,8 @@ public class BreedMobsQuest extends Quest {
super(player, step1, step2, QuestsConfig.BREED_MOB_QUEST.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null), amount, rewardReceived);
if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject)
this.breedMobsQuestObject = breedMobsQuestObject;
if (getVariant() instanceof BreedMobsQuestObject questObject)
this.breedMobsQuestObject = questObject;
else
this.breedMobsQuestObject = null;
if (breedMobsQuestObject == null) {
@ -60,29 +59,10 @@ public class BreedMobsQuest extends Quest {
"VALUES (?, ?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
if (Config.DEBUG)
Logger.info("Saving user for year day %.", String.valueOf(yearDay));
statement.setInt(1, yearDay);
statement.setString(2, getUuid().toString());
statement.setString(3, this.getClass().getSimpleName());
statement.setString(4, breedMobsQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setInt(7, getAmount());
statement.setInt(8, isRewardReceived() ? 1 : 0);
statement.setString(9, this.getClass().getSimpleName());
statement.setString(10, breedMobsQuestObject.getInternalName());
statement.setInt(11, getStep1());
statement.setInt(12, getStep2());
statement.setInt(13, yearDay);
statement.setInt(14, getAmount());
statement.setInt(15, isRewardReceived() ? 1 : 0);
statement.execute();
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
saveQuest(statement, getVariant());
} catch (SQLException exception) {
exception.printStackTrace();
Logger.throwing(BreedMobsQuest.class.getName(), "save", exception);
}
}
@ -107,14 +87,13 @@ public class BreedMobsQuest extends Quest {
}
@Override
public int turnIn(Player player) {
public void turnIn(Player player) {
int maxToTurnIn = getMaxToTurnIn();
if (maxToTurnIn == 0)
return 0;
return;
addStep2(maxToTurnIn);
checkDone(player);
return maxToTurnIn;
}
@Override

View File

@ -21,7 +21,6 @@ import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
public class CollectDropsQuest extends Quest {
@ -31,13 +30,12 @@ public class CollectDropsQuest extends Quest {
public CollectDropsQuest(Player player) throws Exception {
super(player, 0, 0,
QuestsConfig.COLLECT_DROPS_QUEST.get(Utilities.randomOr0(QuestsConfig.COLLECT_DROPS_QUEST.size() - 1)), -1, false);
if (getVariant() instanceof CollectDropsQuestObject collectDropsQuestObject)
this.collectDropsQuestObject = collectDropsQuestObject;
if (getVariant() instanceof CollectDropsQuestObject questObject)
this.collectDropsQuestObject = questObject;
else
this.collectDropsQuestObject = null;
if (collectDropsQuestObject == null) {
Logger.warning("Tried to create collectDropsQuest but unable to find variant: %.", "unknown");
return;
}
}
@ -45,8 +43,8 @@ public class CollectDropsQuest extends Quest {
super(player, step1, step2, QuestsConfig.COLLECT_DROPS_QUEST.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null), amount, rewardReceived);
if (getVariant() instanceof CollectDropsQuestObject collectDropsQuestObject)
this.collectDropsQuestObject = collectDropsQuestObject;
if (getVariant() instanceof CollectDropsQuestObject questObject)
this.collectDropsQuestObject = questObject;
else
this.collectDropsQuestObject = null;
if (collectDropsQuestObject == null) {
@ -64,29 +62,10 @@ public class CollectDropsQuest extends Quest {
"VALUES (?, ?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
if (Config.DEBUG)
Logger.info("Saving user for year day %.", String.valueOf(yearDay));
statement.setInt(1, yearDay);
statement.setString(2, getUuid().toString());
statement.setString(3, this.getClass().getSimpleName());
statement.setString(4, collectDropsQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setInt(7, getAmount());
statement.setInt(8, isRewardReceived() ? 1 : 0);
statement.setString(9, this.getClass().getSimpleName());
statement.setString(10, collectDropsQuestObject.getInternalName());
statement.setInt(11, getStep1());
statement.setInt(12, getStep2());
statement.setInt(13, yearDay);
statement.setInt(14, getAmount());
statement.setInt(15, isRewardReceived() ? 1 : 0);
statement.execute();
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
saveQuest(statement, getVariant());
} catch (SQLException exception) {
exception.printStackTrace();
Logger.throwing(CollectDropsQuest.class.getName(), "save", exception);
}
}
@ -112,12 +91,12 @@ public class CollectDropsQuest extends Quest {
}
@Override
public int turnIn(Player player) {
public void turnIn(Player player) {
PlayerInventory inventory = player.getInventory();
int maxToTurnIn = getMaxToTurnIn();
if (maxToTurnIn == 0)
return 0;
return;
var ref = new Object() {
int tmpAmount = maxToTurnIn;
};
@ -139,7 +118,6 @@ public class CollectDropsQuest extends Quest {
int totalTurnedIn = maxToTurnIn - ref.tmpAmount;
addStep2(totalTurnedIn);
checkDone(player);
return totalTurnedIn;
}
@Override

View File

@ -18,7 +18,6 @@ import org.bukkit.entity.Player;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
public class KillMobsQuest extends Quest {
@ -28,13 +27,12 @@ public class KillMobsQuest extends Quest {
public KillMobsQuest(Player player) throws Exception {
super(player, 0, 0,
QuestsConfig.KILL_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.KILL_MOB_QUEST.size() - 1)), -1, false);
if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject)
this.killMobsQuestObject = killMobsQuestObject;
if (getVariant() instanceof KillMobsQuestObject questObject)
this.killMobsQuestObject = questObject;
else
this.killMobsQuestObject = null;
if (killMobsQuestObject == null) {
Logger.warning("Tried to create killMobsQuest but unable to find variant: %.", "unknown");
return;
}
}
@ -42,8 +40,8 @@ public class KillMobsQuest extends Quest {
super(player, step1, step2, QuestsConfig.KILL_MOB_QUEST.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null), amount, rewardReceived);
if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject)
this.killMobsQuestObject = killMobsQuestObject;
if (getVariant() instanceof KillMobsQuestObject questObject)
this.killMobsQuestObject = questObject;
else
this.killMobsQuestObject = null;
if (killMobsQuestObject == null) {
@ -61,29 +59,10 @@ public class KillMobsQuest extends Quest {
"VALUES (?, ?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
if (Config.DEBUG)
Logger.info("Saving user for year day %.", String.valueOf(yearDay));
statement.setInt(1, yearDay);
statement.setString(2, getUuid().toString());
statement.setString(3, this.getClass().getSimpleName());
statement.setString(4, killMobsQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setInt(7, getAmount());
statement.setInt(8, isRewardReceived() ? 1 : 0);
statement.setString(9, this.getClass().getSimpleName());
statement.setString(10, killMobsQuestObject.getInternalName());
statement.setInt(11, getStep1());
statement.setInt(12, getStep2());
statement.setInt(13, yearDay);
statement.setInt(14, getAmount());
statement.setInt(15, isRewardReceived() ? 1 : 0);
statement.execute();
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
saveQuest(statement, getVariant());
} catch (SQLException exception) {
exception.printStackTrace();
Logger.throwing(KillMobsQuest.class.getName(), "save", exception);
}
}
@ -108,14 +87,13 @@ public class KillMobsQuest extends Quest {
}
@Override
public int turnIn(Player player) {
public void turnIn(Player player) {
int maxToTurnIn = getMaxToTurnIn();
if (maxToTurnIn == 0)
return 0;
return;
addStep2(maxToTurnIn);
checkDone(player);
return maxToTurnIn;
}
@Override

View File

@ -30,13 +30,12 @@ public class MineQuest extends Quest {
public MineQuest(Player player) throws Exception {
super(player, 0, 0,
QuestsConfig.MINE_QUESTS.get(Utilities.randomOr0(QuestsConfig.MINE_QUESTS.size() - 1)), -1, false);
if (getVariant() instanceof MineQuestObject mineQuestObject)
this.mineQuestObject = mineQuestObject;
if (getVariant() instanceof MineQuestObject questObject)
this.mineQuestObject = questObject;
else
mineQuestObject = null;
if (mineQuestObject == null) {
Logger.warning("Tried to create MineQuest but unable to find variant: %.", "unknown");
return;
}
}
@ -45,8 +44,8 @@ public class MineQuest extends Quest {
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null), amount,
rewardReceived);
if (getVariant() instanceof MineQuestObject mineQuestObject)
this.mineQuestObject = mineQuestObject;
if (getVariant() instanceof MineQuestObject questObject)
this.mineQuestObject = questObject;
else
this.mineQuestObject = null;
if (mineQuestObject == null) {
@ -64,29 +63,10 @@ public class MineQuest extends Quest {
"VALUES (?, ?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
if (Config.DEBUG)
Logger.info("Saving user for year day %.", String.valueOf(yearDay));
statement.setInt(1, yearDay);
statement.setString(2, getUuid().toString());
statement.setString(3, this.getClass().getSimpleName());
statement.setString(4, mineQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setInt(7, getAmount());
statement.setInt(8, isRewardReceived() ? 1 : 0);
statement.setString(9, this.getClass().getSimpleName());
statement.setString(10, mineQuestObject.getInternalName());
statement.setInt(11, getStep1());
statement.setInt(12, getStep2());
statement.setInt(13, yearDay);
statement.setInt(14, getAmount());
statement.setInt(15, isRewardReceived() ? 1 : 0);
statement.execute();
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
saveQuest(statement, getVariant());
} catch (SQLException exception) {
exception.printStackTrace();
Logger.throwing(MineQuest.class.getName(), "save", exception);
}
}
@ -111,12 +91,12 @@ public class MineQuest extends Quest {
}
@Override
public int turnIn(Player player) {
public void turnIn(Player player) {
PlayerInventory inventory = player.getInventory();
int maxToTurnIn = getMaxToTurnIn();
if (maxToTurnIn == 0)
return 0;
return;
var ref = new Object() {
int tmpAmount = maxToTurnIn;
};
@ -138,7 +118,6 @@ public class MineQuest extends Quest {
int totalTurnedIn = maxToTurnIn - ref.tmpAmount;
addStep2(totalTurnedIn);
checkDone(player);
return totalTurnedIn;
}
@Override
@ -158,11 +137,8 @@ public class MineQuest extends Quest {
if (!block.getType().equals(mineQuestObject.getMaterial())) {
return true;
}
else if (blockData instanceof Ageable) {
Ageable ageable = (Ageable) blockData;
if (ageable.getAge() != ageable.getMaximumAge()) {
return true;
}
else if (blockData instanceof Ageable ageable) {
return ageable.getAge() != ageable.getMaximumAge();
}
return false;
}

View File

@ -34,8 +34,8 @@ public class OtherQuest extends Quest {
public OtherQuest(Player player) throws Exception {
super(player, 0, 0,
QuestsConfig.OTHER_QUEST.get(Utilities.randomOr0(QuestsConfig.OTHER_QUEST.size() - 1)), -1, false);
if (getVariant() instanceof OtherQuestObject otherQuestObject)
this.otherQuestObject = otherQuestObject;
if (getVariant() instanceof OtherQuestObject questObject)
this.otherQuestObject = questObject;
else
this.otherQuestObject = null;
if (otherQuestObject == null) {
@ -47,8 +47,8 @@ public class OtherQuest extends Quest {
super(player, step1, step2, QuestsConfig.OTHER_QUEST.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null), amount, rewardReceived);
if (getVariant() instanceof OtherQuestObject otherQuestObject)
this.otherQuestObject = otherQuestObject;
if (getVariant() instanceof OtherQuestObject questObject)
this.otherQuestObject = questObject;
else
this.otherQuestObject = null;
if (otherQuestObject == null) {
@ -66,29 +66,10 @@ public class OtherQuest extends Quest {
"VALUES (?, ?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
if (Config.DEBUG)
Logger.info("Saving user for year day %.", String.valueOf(yearDay));
statement.setInt(1, yearDay);
statement.setString(2, getUuid().toString());
statement.setString(3, this.getClass().getSimpleName());
statement.setString(4, otherQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setInt(7, getAmount());
statement.setInt(8, isRewardReceived() ? 1 : 0);
statement.setString(9, this.getClass().getSimpleName());
statement.setString(10, otherQuestObject.getInternalName());
statement.setInt(11, getStep1());
statement.setInt(12, getStep2());
statement.setInt(13, yearDay);
statement.setInt(14, getAmount());
statement.setInt(15, isRewardReceived() ? 1 : 0);
statement.execute();
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
saveQuest(statement, getVariant());
} catch (SQLException exception) {
exception.printStackTrace();
Logger.throwing(OtherQuest.class.getName(), "save", exception);
}
}
@ -114,12 +95,12 @@ public class OtherQuest extends Quest {
}
@Override
public int turnIn(Player player) {
public void turnIn(Player player) {
PlayerInventory inventory = player.getInventory();
int maxToTurnIn = getMaxToTurnIn();
if (maxToTurnIn == 0)
return 0;
return;
var ref = new Object() {
int tmpAmount = maxToTurnIn;
};
@ -141,7 +122,6 @@ public class OtherQuest extends Quest {
int totalTurnedIn = maxToTurnIn - ref.tmpAmount;
addStep2(totalTurnedIn);
checkDone(player);
return totalTurnedIn;
}
@Override
@ -176,7 +156,7 @@ public class OtherQuest extends Quest {
checkDone();
}
public void bucket(ItemStack bucket, Entity entity) {
public void bucket(Entity entity) {
if (isDone() || !entity.getType().equals(otherQuestObject.getEntity()) || getAmount() == getStep1()|| !otherQuestObject.getCategory().equalsIgnoreCase("BUCKETING")) {
return;
}
@ -192,14 +172,6 @@ public class OtherQuest extends Quest {
checkDone();
}
//public void brewingStarted(ItemStack ingredient, Location brewingStandLocation){
// Logger.warning("Brewing Started");
//}
//public void brewingFinished(List <ItemStack> results, Location brewingStandLocation) {
// Logger.warning("Brewing Finished");
//}
public static List<String> getSubTypes() {
return QuestsConfig.OTHER_QUEST.stream().map(Variant::getInternalName).collect(Collectors.toList());
}

View File

@ -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);
}

View File

@ -13,7 +13,7 @@ import java.util.UUID;
public class LoadUser extends BukkitRunnable {
UUID uuid;
private final UUID uuid;
public LoadUser(UUID uuid) {
this.uuid = uuid;
@ -22,8 +22,7 @@ public class LoadUser extends BukkitRunnable {
@Override
public void run() {
String sql = "SELECT * FROM generic_quest_progress WHERE uuid = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
try (PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql)) {
statement.setString(1, uuid.toString());
ResultSet resultSet = statement.executeQuery();
if (resultSet.next() && resultSet.getInt("year_day") == Utilities.getYearDay()) {
@ -42,7 +41,7 @@ public class LoadUser extends BukkitRunnable {
Logger.warning("Unable to load quest for %, creating new quest...", uuid.toString());
}
} catch (SQLException exception) {
exception.printStackTrace();
Logger.throwing(LoadUser.class.getName(), "run", exception);
}
if (Config.DEBUG)
Logger.info("Creating new daily quest for %", uuid.toString());

View File

@ -33,4 +33,8 @@ public class Logger {
}
logger.severe(severe);
}
public static void throwing(String sourceClass, String sourceMethod, Exception e) {
logger.throwing(sourceClass, sourceMethod, e);
}
}

View File

@ -40,8 +40,7 @@ public class ProgressBookOpener {
TagResolver.resolver(Placeholder.component("variant", dailyQuest.getVariant().getName())),
dailyQuest.getTagResolvers()
);
List<String> pages = new ArrayList<>();
pages.addAll(Config.PROGRESS_PAGES);
List<String> pages = new ArrayList<>(Config.PROGRESS_PAGES);
return (pages.stream()
.map(page -> miniMessage.deserialize(page, tagResolver))
.collect(Collectors.toList()));