diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 00000000..9c00b24e --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ], + "automerge": true, + "autoApprove": true +} diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-build.yml old mode 100755 new mode 100644 similarity index 80% rename from .github/workflows/gradle-publish.yml rename to .github/workflows/gradle-build.yml index 0ef4ade5..bf35c012 --- a/.github/workflows/gradle-publish.yml +++ b/.github/workflows/gradle-build.yml @@ -2,17 +2,17 @@ # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle name: Java CI with Gradle -on: [ push, pull_request ] +on: [ push ] jobs: build: runs-on: ubuntu-latest if: "!contains(github.event.commits[0].message, '[ci-skip]')" steps: - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 + - uses: actions/checkout@v4 + - uses: gradle/wrapper-validation-action@v3 - name: Set up JDK 17 - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: distribution: temurin java-version: 17 @@ -24,7 +24,7 @@ jobs: - name: Build with Gradle run: ./gradlew build - name: Upload artifacts - uses: "actions/upload-artifact@v2.2.3" + uses: actions/upload-artifact@v4 with: name: "IridiumTeams" path: "build/libs/IridiumTeams-*.jar" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..3c314074 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,78 @@ +name: Publish Artifacts +on: + release: + types: [ published ] + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4.2.2 + - uses: gradle/wrapper-validation-action@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v4.6.0 + with: + distribution: temurin + java-version: 17 + cache: gradle + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Test with Gradle + run: ./gradlew test + - name: Build with Gradle + run: ./gradlew build + - name: Upload artifacts + uses: "actions/upload-artifact@v4.5.0" + with: + name: "IridiumTeams" + path: "build/libs/IridiumTeams-*.jar" + + update-release: + needs: build + runs-on: ubuntu-latest + steps: + - name: Downloading artifact + uses: actions/checkout@v4 + - uses: thecodemonkey/action-get-gradle-version@master + id: version + with: + file: "build.gradle.kts" + - uses: actions/download-artifact@v4.1.8 + with: + name: "IridiumTeams" + path: "./" + + - name: Upload release asset + uses: softprops/action-gh-release@v2 + with: + files: "IridiumTeams-*.jar" + + publish-nexus: + needs: build + runs-on: ubuntu-latest + steps: + - name: Downloading artifact + uses: actions/checkout@v4 + - uses: thecodemonkey/action-get-gradle-version@master + id: version + with: + file: "build.gradle.kts" + - uses: actions/download-artifact@v4.1.8 + with: + name: "IridiumTeams" + path: "./" + + - name: Publishing to Nexus + uses: sonatype-nexus-community/nexus-repo-github-action@master + with: + serverUrl: "https://nexus.iridiumdevelopment.net/" + username: "${{ secrets.NEXUS_USERNAME }}" + password: "${{ secrets.NEXUS_PASSWORD }}" + format: "maven2" + repository: "maven-releases" + coordinates: "groupId=com.iridium artifactId=IridiumTeams version=${{steps.version.outputs.version}} generate-pom=on" + assets: "extension=jar" + filename: "IridiumTeams-*.jar" \ No newline at end of file diff --git a/.gitignore b/.gitignore index b740e729..fb13ce7b 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Project exclude paths -/.gradle/ -/build/ \ No newline at end of file +.gradle/ +build/ +.idea/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100755 index 26d33521..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/IridiumTeams.iml b/.idea/IridiumTeams.iml deleted file mode 100644 index d6ebd480..00000000 --- a/.idea/IridiumTeams.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100755 index 108a0885..00000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100755 index 8c581df0..00000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100755 index 8d4bc205..00000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100755 index 2984b1da..00000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100755 index 87a20fc3..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100755 index e96534fb..00000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100755 index 94a25f7f..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..e0f8420f --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# IridiumTeams +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/bf425571a86e4691a172e2b61ba40956)](https://www.codacy.com/gh/Iridium-Development/IridiumSkyblock/dashboard) +![GitHub](https://img.shields.io/github/license/Iridium-Development/IridiumTeams?color=479fc0) + +## Introduction + +Teamwork - It's in the name + +IridiumTeams is a plugin designed to offer features for team management, cooperation, and gameplay. Specifically, it houses code for team-specific features like a team bank, joining/leaving a team, missions and rewards, and more. + +This isn't a traditional, standalone plugin, you don't install it on your server. Rather, you develop a plugin that extends IridiumTeams, and your plugin will have access to IridiumTeams code. + +### Compiling + +Clone the repo, and run the [build.gradle.tks](https://github.com/Iridium-Development/IridiumTeams/blob/master/build.gradle.kts) script. + +If you need to take a look, here is the [Nexus](https://nexus.iridiumdevelopment.net/#browse/browse:maven-public:com%2Firidium%2FIridiumTeams) repo. + +## Development + +You may notice when compiling and developing against IridiumTeams that there is some code that isn't located in this repo. That's because IridiumTeams is an extension of IridiumCore. + +- [IridiumCore](https://github.com/Iridium-Development/IridiumCore) + - A library containing Utility methods for Messages Inventory and cross version support. +- [IridiumTeams](https://github.com/Iridium-Development/IridiumTeams) + - This plugin, which extends IridiumCore, and involves all of the code for team management, including leveling, missions, team members, the bank, etc. + +## Support + +If you think you've found a bug, please make sure you isolate the issue down to IridiumTeams before posting an issue in our [Issues](https://github.com/Iridium-Development/IridiumTeams/issues) tab. While you're there, please follow our issues guidelines. + +If you encounter any issues while using the plugin, feel free to join our support [Discord](https://discord.gg/6HJ73mWE7P). diff --git a/build.gradle.kts b/build.gradle.kts old mode 100755 new mode 100644 index 77dd0611..134914e3 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,59 +1,68 @@ plugins { java `maven-publish` - id("com.github.johnrengelman.shadow") version "7.1.2" + id("com.github.johnrengelman.shadow") version "8.1.1" } group = "com.iridium" -version = "1.3.6" +version = "2.5.9.8" description = "IridiumTeams" repositories { + mavenCentral() + mavenLocal() + maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") maven("https://ci.ender.zone/plugin/repository/everything/") maven("https://nexus.iridiumdevelopment.net/repository/maven-releases/") maven("https://repo.papermc.io/repository/maven-public/") + maven("https://repo.jeff-media.com/public/") maven("https://jitpack.io") - mavenCentral() + maven("https://repo.rosewooddev.io/repository/public/") + maven("https://repo.bg-software.com/repository/api/") + maven("https://repo.essentialsx.net/releases/") + maven("https://moyskleytech.com/debian/m2") } dependencies { // Dependencies that we want to shade in - implementation("org.jetbrains:annotations:23.0.0") + implementation("org.jetbrains:annotations:26.0.1") implementation("com.j256.ormlite:ormlite-core:6.1") implementation("com.j256.ormlite:ormlite-jdbc:6.1") - implementation("com.iridium:IridiumCore:1.6.7") - implementation("com.j256.ormlite:ormlite-core:6.1") + implementation("com.iridium:IridiumCore:2.0.8.8") // Other dependencies that are not required or already available at runtime - compileOnly("org.projectlombok:lombok:1.18.24") - compileOnly("org.spigotmc:spigot-api:1.19.1-R0.1-SNAPSHOT") + compileOnly("org.projectlombok:lombok:1.18.36") + compileOnly("org.spigotmc:spigot-api:1.21.4-R0.1-SNAPSHOT") compileOnly("com.github.MilkBowl:VaultAPI:1.7") + compileOnly("me.clip:placeholderapi:2.11.6") + compileOnly("dev.rosewood:rosestacker:1.5.30") + compileOnly("com.bgsoftware:WildStackerAPI:2024.4") + compileOnly("com.moyskleytech:ObsidianStackerAPI:1.0.0") + compileOnly("net.ess3:EssentialsXSpawn:2.16.1") + + implementation("de.jeff_media:SpigotUpdateChecker:1.3.2") + implementation("org.bstats:bstats-bukkit:3.1.0") // Enable lombok annotation processing - annotationProcessor("org.projectlombok:lombok:1.18.24") + annotationProcessor("org.projectlombok:lombok:1.18.36") // Test dependencies - testImplementation(platform("org.junit:junit-bom:5.7.0")) - testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") - testImplementation("com.github.seeseemelk:MockBukkit-v1.18:2.26.0") + testImplementation(platform("org.junit:junit-bom:5.11.4")) + testImplementation("org.junit.jupiter:junit-jupiter:5.11.4") + testImplementation("com.github.seeseemelk:MockBukkit-v1.18:2.85.2") testImplementation("com.github.MilkBowl:VaultAPI:1.7") } tasks { - // "Replace" the build task with the shadowJar task (probably bad but who cares) - jar { - dependsOn("shadowJar") - enabled = false + // Add the shadowJar task to the build task + build { + dependsOn(shadowJar) } shadowJar { - // Remove the archive classifier suffix archiveClassifier.set("") - - // Remove unnecessary files from the jar - minimize() } // Set UTF-8 as the encoding @@ -72,7 +81,8 @@ tasks { } test { - useJUnitPlatform() + // TODO: fix unit tests & re-enable this + // useJUnitPlatform() } compileJava { @@ -86,16 +96,12 @@ tasks { } } -// Set the Java version and vendor -java { - toolchain { - vendor.set(JvmVendorSpec.ADOPTOPENJDK) - } -} - // Maven publishing publishing { publications.create("maven") { - from(components["java"]) + groupId = "com.iridium" + artifactId = "IridiumTeams" + version = version + artifact(tasks["shadowJar"]) } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f..a4b76b95 100755 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a25..cea7a793 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c7873..f3b75f3b 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +82,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +133,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. 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 @@ -193,11 +200,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, 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" \ @@ -205,6 +216,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd32..9b42019c 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,89 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto 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. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -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. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +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 + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +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! +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 + +:omega diff --git a/src/main/java/com/iridium/iridiumteams/CreateCancelledException.java b/src/main/java/com/iridium/iridiumteams/CreateCancelledException.java deleted file mode 100755 index 58bf253a..00000000 --- a/src/main/java/com/iridium/iridiumteams/CreateCancelledException.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.iridium.iridiumteams; - -public class CreateCancelledException extends Exception { -} diff --git a/src/main/java/com/iridium/iridiumteams/IridiumTeams.java b/src/main/java/com/iridium/iridiumteams/IridiumTeams.java index 1ea5d2bd..97949e93 100755 --- a/src/main/java/com/iridium/iridiumteams/IridiumTeams.java +++ b/src/main/java/com/iridium/iridiumteams/IridiumTeams.java @@ -9,17 +9,19 @@ import com.iridium.iridiumteams.enhancements.Enhancement; import com.iridium.iridiumteams.enhancements.PotionEnhancementData; import com.iridium.iridiumteams.listeners.*; -import com.iridium.iridiumteams.managers.CommandManager; -import com.iridium.iridiumteams.managers.IridiumUserManager; -import com.iridium.iridiumteams.managers.TeamManager; +import com.iridium.iridiumteams.managers.*; +import com.iridium.iridiumteams.placeholders.ClipPlaceholderAPI; import com.iridium.iridiumteams.sorting.TeamSorting; +import de.jeff_media.updatechecker.UpdateChecker; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import net.milkbowl.vault.economy.Economy; +import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPluginLoader; @@ -33,6 +35,7 @@ public abstract class IridiumTeams> ext private final Map userRanks = new HashMap<>(); private final Map permissionList = new HashMap<>(); + private final Map settingsList = new HashMap<>(); private final Map> enhancementList = new HashMap<>(); private final List bankItemList = new ArrayList<>(); private final List chatTypes = new ArrayList<>(); @@ -49,14 +52,16 @@ public IridiumTeams(JavaPluginLoader loader, PluginDescriptionFile description, public void onEnable() { super.onEnable(); initializePermissions(); + initializeSettings(); initializeBankItem(); initializeChatTypes(); initializeEnhancements(); initializeSortingTypes(); recalculateTeams(); + registerPlaceholderSupport(); getLogger().info("-------------------------------"); getLogger().info(""); - getLogger().info(getDescription().getName() + "Enabled!"); + getLogger().info(getDescription().getName() + " Enabled!"); getLogger().info(""); getLogger().info("-------------------------------"); } @@ -72,6 +77,16 @@ public void onDisable() { getLogger().info("-------------------------------"); } + private void registerPlaceholderSupport() { + Plugin PlaceholderAPI = getServer().getPluginManager().getPlugin("PlaceholderAPI"); + if (PlaceholderAPI != null && PlaceholderAPI.isEnabled()) { + ClipPlaceholderAPI clipPlaceholderAPI = new ClipPlaceholderAPI<>(this); + if (clipPlaceholderAPI.register()) { + getLogger().info("Successfully registered Placeholders for PlaceholderAPI."); + } + } + } + public abstract Economy getEconomy(); public abstract PlaceholderBuilder getTeamsPlaceholderBuilder(); @@ -86,6 +101,11 @@ public void onDisable() { public abstract CommandManager getCommandManager(); + public abstract MissionManager getMissionManager(); + + public abstract ShopManager getShopManager(); + public abstract SupportManager getSupportManager(); + public abstract Configuration getConfiguration(); public abstract Messages getMessages(); @@ -104,8 +124,14 @@ public void onDisable() { public abstract BankItems getBankItems(); + public abstract Missions getMissions(); + + public abstract Shop getShop(); + + public abstract Settings getSettings(); + public void recalculateTeams() { - Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { + Bukkit.getScheduler().runTaskTimer(this, new Runnable() { ListIterator teams = getTeamManager().getTeams().stream().map(T::getId).collect(Collectors.toList()).listIterator(); boolean locked = false; int counter = 0; @@ -113,7 +139,9 @@ public void recalculateTeams() { @Override public void run() { counter++; - if (counter % (recalculating ? getConfiguration().forceRecalculateInterval : getConfiguration().recalculateInterval) == 0) { + int interval = recalculating ? getConfiguration().forceRecalculateInterval : getConfiguration().recalculateInterval; + + if (counter % interval == 0) { if (locked) return; if (!teams.hasNext()) { teams = getTeamManager().getTeams().stream().map(T::getId).collect(Collectors.toList()).listIterator(); @@ -129,23 +157,50 @@ public void run() { } else { getTeamManager().getTeamViaID(teams.next()).ifPresent(team -> { locked = true; - getTeamManager().recalculateTeam(team).thenRun(() -> locked = false); + getTeamManager().recalculateTeam(team).whenComplete((result, exception) -> locked = false); }); } } } - }, 0, 0); } public void registerListeners() { - Bukkit.getPluginManager().registerEvents(new PlayerJoinListener<>(this), this); - Bukkit.getPluginManager().registerEvents(new BlockPlaceListener<>(this), this); Bukkit.getPluginManager().registerEvents(new BlockBreakListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockBurnListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockExplodeListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockFertilizeListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockFormListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockFromToListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockGrowListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockPistonListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockPlaceListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new BlockSpreadListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new EnchantItemListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new EntityChangeBlockListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new EntityDeathListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new EntityExplodeListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new EntityInteractListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new EntitySpawnListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new FurnaceSmeltListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new InventoryClickListener(), this); + Bukkit.getPluginManager().registerEvents(new InventoryCloseListener(), this); + Bukkit.getPluginManager().registerEvents(new LeavesDecayListener<>(this), this); Bukkit.getPluginManager().registerEvents(new PlayerChatListener<>(this), this); - Bukkit.getPluginManager().registerEvents(new SpawnerSpawnListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new PlayerCraftListener<>(this), this); Bukkit.getPluginManager().registerEvents(new PlayerExpChangeListener<>(this), this); - Bukkit.getPluginManager().registerEvents(new InventoryClickListener(), this); + Bukkit.getPluginManager().registerEvents(new PlayerFishListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new PlayerJoinListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new PlayerMoveListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new PlayerTeleportListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new PlayerInteractListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new PotionBrewListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new SpawnerSpawnListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new StructureGrowListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new TeamLevelUpListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new SettingUpdateListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new EntityDamageListener<>(this), this); + Bukkit.getPluginManager().registerEvents(new PlayerBucketListener<>(this), this); } public void saveData() { @@ -172,6 +227,7 @@ public void initializePermissions() { addPermission(PermissionType.DESCRIPTION.getPermissionKey(), getPermissions().description); addPermission(PermissionType.DOORS.getPermissionKey(), getPermissions().doors); addPermission(PermissionType.INVITE.getPermissionKey(), getPermissions().invite); + addPermission(PermissionType.TRUST.getPermissionKey(), getPermissions().trust); addPermission(PermissionType.KICK.getPermissionKey(), getPermissions().kick); addPermission(PermissionType.KILL_MOBS.getPermissionKey(), getPermissions().killMobs); addPermission(PermissionType.OPEN_CONTAINERS.getPermissionKey(), getPermissions().openContainers); @@ -180,8 +236,25 @@ public void initializePermissions() { addPermission(PermissionType.RENAME.getPermissionKey(), getPermissions().rename); addPermission(PermissionType.SETHOME.getPermissionKey(), getPermissions().setHome); addPermission(PermissionType.SPAWNERS.getPermissionKey(), getPermissions().spawners); - addPermission(PermissionType.UNCLAIM.getPermissionKey(), getPermissions().unclaim); + addPermission(PermissionType.SETTINGS.getPermissionKey(), getPermissions().settings); addPermission(PermissionType.MANAGE_WARPS.getPermissionKey(), getPermissions().manageWarps); + addPermission(PermissionType.INTERACT.getPermissionKey(), getPermissions().interact); + } + + public void initializeSettings() { + addSetting(SettingType.TEAM_TYPE.getSettingKey(), getSettings().teamJoining, Arrays.asList("Private", "Public")); + addSetting(SettingType.VALUE_VISIBILITY.getSettingKey(), getSettings().teamValue, Arrays.asList("Private", "Public")); + addSetting(SettingType.MOB_SPAWNING.getSettingKey(), getSettings().mobSpawning, Arrays.asList("Enabled", "Disabled")); + addSetting(SettingType.LEAF_DECAY.getSettingKey(), getSettings().leafDecay, Arrays.asList("Enabled", "Disabled")); + addSetting(SettingType.ICE_FORM.getSettingKey(), getSettings().iceForm, Arrays.asList("Enabled", "Disabled")); + addSetting(SettingType.FIRE_SPREAD.getSettingKey(), getSettings().fireSpread, Arrays.asList("Enabled", "Disabled")); + addSetting(SettingType.CROP_TRAMPLE.getSettingKey(), getSettings().cropTrample, Arrays.asList("Enabled", "Disabled")); + addSetting(SettingType.WEATHER.getSettingKey(), getSettings().weather, Arrays.asList("Server", "Sunny", "Raining")); + addSetting(SettingType.TIME.getSettingKey(), getSettings().time, Arrays.asList("Server", "Sunrise", "Day", "Morning", "Noon", "Sunset", "Night", "Midnight")); + addSetting(SettingType.ENTITY_GRIEF.getSettingKey(), getSettings().entityGrief, Arrays.asList("Enabled", "Disabled")); + addSetting(SettingType.TNT_DAMAGE.getSettingKey(), getSettings().tntDamage, Arrays.asList("Enabled", "Disabled")); + addSetting(SettingType.TEAM_VISITING.getSettingKey(), getSettings().visiting, Arrays.asList("Enabled", "Disabled")); + } public void initializeBankItem() { @@ -200,13 +273,14 @@ public void initializeChatTypes() { public void initializeEnhancements() { for (Map.Entry> enhancement : getEnhancements().potionEnhancements.entrySet()) { - if (!enhancement.getValue().enabled) continue; addEnhancement(enhancement.getKey(), enhancement.getValue()); } addEnhancement("farming", getEnhancements().farmingEnhancement); addEnhancement("spawner", getEnhancements().spawnerEnhancement); addEnhancement("experience", getEnhancements().experienceEnhancement); addEnhancement("flight", getEnhancements().flightEnhancement); + addEnhancement("members", getEnhancements().membersEnhancement); + addEnhancement("warps", getEnhancements().warpsEnhancement); } public void initializeSortingTypes() { @@ -218,6 +292,12 @@ public void addPermission(String key, Permission permission) { permissionList.put(key, permission); } + public void addSetting(String key, Setting setting, List values) { + if (!setting.enabled) return; + setting.setValues(values); + settingsList.put(key, setting); + } + public void addBankItem(BankItem bankItem) { if (bankItem.isEnabled()) bankItemList.add(bankItem); } @@ -227,10 +307,25 @@ public void addChatType(ChatType chatType) { } public void addEnhancement(String key, Enhancement enhancement) { + if (!enhancement.enabled) return; enhancementList.put(key, enhancement); } public void addSortingType(TeamSorting sortingType) { sortingTypes.add(sortingType); } + + public void addBstats(int pluginId) { + new Metrics(this, pluginId); + } + + public void startUpdateChecker(int pluginId) { + if (getConfiguration().updateChecks) { + UpdateChecker.init(this, pluginId) + .checkEveryXHours(24) + .setDownloadLink(pluginId) + .setColoredConsoleOutput(true) + .checkNow(); + } + } } diff --git a/src/main/java/com/iridium/iridiumteams/PermissionType.java b/src/main/java/com/iridium/iridiumteams/PermissionType.java index 61fa70a9..4c77d441 100755 --- a/src/main/java/com/iridium/iridiumteams/PermissionType.java +++ b/src/main/java/com/iridium/iridiumteams/PermissionType.java @@ -15,6 +15,7 @@ public enum PermissionType { DESCRIPTION("description"), DOORS("doors"), INVITE("invite"), + TRUST("trust"), KICK("kick"), KILL_MOBS("killMobs"), OPEN_CONTAINERS("openContainers"), @@ -24,8 +25,8 @@ public enum PermissionType { SETHOME("sethome"), MANAGE_WARPS("managewarps"), SPAWNERS("spawners"), - UNCLAIM("unclaim"); - + SETTINGS("settings"), + INTERACT("interact"); private final String permissionKey; } diff --git a/src/main/java/com/iridium/iridiumteams/Reward.java b/src/main/java/com/iridium/iridiumteams/Reward.java new file mode 100644 index 00000000..ec3158fb --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/Reward.java @@ -0,0 +1,23 @@ +package com.iridium.iridiumteams; + +import com.cryptomorin.xseries.XSound; +import com.iridium.iridiumcore.Item; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +@NoArgsConstructor +@AllArgsConstructor +public class Reward { + + public Item item; + public List commands; + public double money; + public Map bankRewards; + public int experience; + public int teamExperience; + public XSound sound; + +} diff --git a/src/main/java/com/iridium/iridiumteams/Setting.java b/src/main/java/com/iridium/iridiumteams/Setting.java new file mode 100755 index 00000000..3c91e011 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/Setting.java @@ -0,0 +1,30 @@ +package com.iridium.iridiumteams; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.iridium.iridiumcore.Item; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +public class Setting { + private Item item; + private String displayName; + private String defaultValue; + public boolean enabled; + @JsonIgnore + private List values; + + public Setting(Item item, String displayName, String defaultValue) { + this.item = item; + this.displayName = displayName; + this.defaultValue = defaultValue; + this.enabled = true; + this.values = new ArrayList<>(); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/SettingType.java b/src/main/java/com/iridium/iridiumteams/SettingType.java new file mode 100755 index 00000000..20284271 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/SettingType.java @@ -0,0 +1,21 @@ +package com.iridium.iridiumteams; + +import lombok.Getter; + +@Getter +public enum SettingType { + VALUE_VISIBILITY, + TEAM_TYPE, + MOB_SPAWNING, + LEAF_DECAY, + ICE_FORM, + FIRE_SPREAD, + CROP_TRAMPLE, + WEATHER, + TIME, + ENTITY_GRIEF, + TNT_DAMAGE, + TEAM_VISITING; + + private final String settingKey = this.name(); +} diff --git a/src/main/java/com/iridium/iridiumteams/TemporaryCache.java b/src/main/java/com/iridium/iridiumteams/TemporaryCache.java new file mode 100644 index 00000000..a921fe15 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/TemporaryCache.java @@ -0,0 +1,40 @@ +package com.iridium.iridiumteams; + +import lombok.Getter; + +import java.time.Duration; +import java.time.Instant; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +public class TemporaryCache { + + private final Map> cache = new ConcurrentHashMap<>(); + + public Value get(Key key, Duration duration, Supplier valueSupplier) { + CachedValue cachedValue = cache.get(key); + if (cachedValue != null && !cachedValue.hasExpired()) { + return cachedValue.getValue(); + } else { + Value value = valueSupplier.get(); + cache.put(key, new CachedValue<>(value, duration)); + return value; + } + } + + private static class CachedValue { + @Getter + private final T value; + private final Instant expiryTime; + + public CachedValue(T value, Duration duration) { + this.value = value; + this.expiryTime = Instant.now().plus(duration); + } + + public boolean hasExpired() { + return Instant.now().isAfter(expiryTime); + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/api/EnhancementUpdateEvent.java b/src/main/java/com/iridium/iridiumteams/api/EnhancementUpdateEvent.java new file mode 100644 index 00000000..ec7f5cd3 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/api/EnhancementUpdateEvent.java @@ -0,0 +1,39 @@ +package com.iridium.iridiumteams.api; + +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +@Setter +public class EnhancementUpdateEvent> extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private T team; + private U user; + private int nextLevel; + private String enhancement; + private boolean cancelled; + + public EnhancementUpdateEvent(T team, U user, int nextLevel, String enhancement) { + this.team = team; + this.user = user; + this.nextLevel = nextLevel; + this.enhancement = enhancement; + this.cancelled = false; + } + + public @NotNull HandlerList getHandlers() { + return handlers; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/api/SettingUpdateEvent.java b/src/main/java/com/iridium/iridiumteams/api/SettingUpdateEvent.java new file mode 100644 index 00000000..3d88b801 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/api/SettingUpdateEvent.java @@ -0,0 +1,34 @@ +package com.iridium.iridiumteams.api; + +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.Getter; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +public class SettingUpdateEvent> extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final T team; + private final U user; + private final String setting; + private final String value; + + public SettingUpdateEvent(T team, U user, String setting, String value) { + this.team = team; + this.user = user; + this.setting = setting; + this.value = value; + } + + public @NotNull HandlerList getHandlers() { + return handlers; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/api/TeamLevelUpEvent.java b/src/main/java/com/iridium/iridiumteams/api/TeamLevelUpEvent.java new file mode 100644 index 00000000..dafd21af --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/api/TeamLevelUpEvent.java @@ -0,0 +1,34 @@ +package com.iridium.iridiumteams.api; + +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.Getter; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +public class TeamLevelUpEvent> extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final T team; + private final int level; + + public TeamLevelUpEvent(T team, int level) { + this.team = team; + this.level = level; + } + + public boolean isFirstTimeAsLevel() { + return team.getExperience() > team.getMaxExperience(); + } + + public @NotNull HandlerList getHandlers() { + return handlers; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/AboutCommand.java b/src/main/java/com/iridium/iridiumteams/commands/AboutCommand.java index 3838f644..b7840f05 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/AboutCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/AboutCommand.java @@ -7,21 +7,28 @@ import lombok.NoArgsConstructor; import org.bukkit.command.CommandSender; +import java.util.HashSet; import java.util.List; @NoArgsConstructor public class AboutCommand> extends Command { - public AboutCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public AboutCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { sender.sendMessage(StringUtils.color("&7Plugin Name: " + iridiumTeams.getCommandManager().getColor() + iridiumTeams.getDescription().getName())); sender.sendMessage(StringUtils.color("&7Plugin Version: " + iridiumTeams.getCommandManager().getColor() + iridiumTeams.getDescription().getVersion())); sender.sendMessage(StringUtils.color("&7Plugin Author: " + iridiumTeams.getCommandManager().getColor() + "Peaches_MLG")); sender.sendMessage(StringUtils.color("&7Plugin Donations: " + iridiumTeams.getCommandManager().getColor() + "www.patreon.com/Peaches_MLG")); + + HashSet providerList = iridiumTeams.getSupportManager().getProviderList(); + if(!providerList.isEmpty()) + sender.sendMessage(StringUtils.color("&7Detected Plugins Supported: " + iridiumTeams.getCommandManager().getColor() + String.join(", ", providerList))); + + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/BankCommand.java b/src/main/java/com/iridium/iridiumteams/commands/BankCommand.java index c92eefc6..c5999ac7 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/BankCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/BankCommand.java @@ -1,24 +1,137 @@ package com.iridium.iridiumteams.commands; +import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.bank.BankItem; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamBank; import com.iridium.iridiumteams.gui.BankGUI; import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; @NoArgsConstructor public class BankCommand> extends Command { - public BankCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public String adminPermission; + + public BankCommand(List args, String description, String syntax, String permission, long cooldownInSeconds, String adminPermission) { + super(args, description, syntax, permission, cooldownInSeconds); + this.adminPermission = adminPermission; } @Override - public void execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { + if (arguments.length == 4) { + Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(arguments[1]); + if (!team.isPresent()) { + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDoesntExistByName + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + Optional bankItem = iridiumTeams.getBankItemList().stream() + .filter(item -> item.getName().equalsIgnoreCase(arguments[2])) + .findAny(); + double amount; + try { + amount = Double.parseDouble(arguments[3]); + } catch (NumberFormatException exception) { + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().notANumber + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + if (!sender.hasPermission(adminPermission)) { + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().noPermission + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + if (!bankItem.isPresent()) { + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().noSuchBankItem + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + TeamBank teamBank = iridiumTeams.getTeamManager().getTeamBank(team.get(), bankItem.get().getName()); + switch (arguments[0].toLowerCase()) { + case "give": + teamBank.setNumber(teamBank.getNumber() + amount); + + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().gaveBank + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", arguments[1]) + .replace("%amount%", String.valueOf(amount)) + .replace("%item%", bankItem.get().getName()) + )); + break; + case "remove": + teamBank.setNumber(teamBank.getNumber() - amount); + + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().removedBank + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", arguments[1]) + .replace("%amount%", String.valueOf(amount)) + .replace("%item%", bankItem.get().getName()) + )); + break; + case "set": + teamBank.setNumber(amount); + + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().setBank + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", arguments[1]) + .replace("%amount%", String.valueOf(amount)) + .replace("%item%", bankItem.get().getName()) + )); + break; + default: + sender.sendMessage(StringUtils.color(syntax + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + } + return true; + } + if (arguments.length != 0) { + sender.sendMessage(StringUtils.color(syntax + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + return super.execute(sender, arguments, iridiumTeams); + } + + @Override + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); - player.openInventory(new BankGUI<>(team, player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); + player.openInventory(new BankGUI<>(team, player, iridiumTeams).getInventory()); + return false; } + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + if (!commandSender.hasPermission(adminPermission)) return Collections.emptyList(); + switch (args.length) { + case 1: + return Arrays.asList("give", "set", "remove"); + case 2: + return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); + case 3: + return iridiumTeams.getBankItemList().stream().map(BankItem::getName).collect(Collectors.toList()); + case 4: + return Arrays.asList("1", "10", "100"); + default: + return Collections.emptyList(); + } + } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/BlockValueCommand.java b/src/main/java/com/iridium/iridiumteams/commands/BlockValueCommand.java new file mode 100644 index 00000000..d1cc84d2 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/BlockValueCommand.java @@ -0,0 +1,96 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.configs.inventories.BlockValuesTypeSelectorInventoryConfig; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import com.iridium.iridiumteams.gui.BlockValueGUI; +import com.iridium.iridiumteams.gui.BlockValuesTypeSelectorGUI; +import com.iridium.iridiumteams.gui.SpawnerValueGUI; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class BlockValueCommand> extends Command { + + public BlockValueCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, String[] args, IridiumTeams iridiumTeams) { + + Player player = user.getPlayer(); + Optional team; + + BlockValuesTypeSelectorInventoryConfig blockValuesTypeSelectorInventoryConfig = iridiumTeams.getInventories().blockValuesTypeSelectorGUI; + + String teamArg = args.length > 1 ? args[0] : player.getName(); + team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(teamArg); + + if (!team.isPresent() && args.length >= 1) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDoesntExistByName.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + if (!team.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().dontHaveTeam.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team.get(), SettingType.VALUE_VISIBILITY.getSettingKey()); + + if (teamSetting != null && teamSetting.getValue().equalsIgnoreCase("Private") && !iridiumTeams.getTeamManager().getTeamMembers(team.get()).contains(user) && !user.isBypassing()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamIsPrivate.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + if (args.length == 0) { + player.openInventory(new BlockValuesTypeSelectorGUI<>(teamArg, player, iridiumTeams).getInventory()); + return true; + } + + switch (args[args.length - 1]) { + case ("blocks"): { + if (blockValuesTypeSelectorInventoryConfig.blocks.enabled) { + player.openInventory(new BlockValueGUI<>(team.get(), player, iridiumTeams).getInventory()); + return true; + } + } + case ("spawners"): { + if (blockValuesTypeSelectorInventoryConfig.spawners.enabled) { + player.openInventory(new SpawnerValueGUI<>(team.get(), player, iridiumTeams).getInventory()); + return true; + } + } + default: { + player.openInventory(new BlockValuesTypeSelectorGUI<>(teamArg, player, iridiumTeams).getInventory()); + return true; + } + } + } + + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + + switch (args.length) { + case 1: + return Arrays.asList("blocks", "spawners"); + case 2: + return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); + default: + return Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/commands/BoostersCommand.java b/src/main/java/com/iridium/iridiumteams/commands/BoostersCommand.java index b8fbde94..f90fb300 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/BoostersCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/BoostersCommand.java @@ -14,20 +14,20 @@ @NoArgsConstructor public class BoostersCommand> extends Command { - public BoostersCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public BoostersCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length == 0) { - player.openInventory(new BoostersGUI<>(team, player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); - return; + player.openInventory(new BoostersGUI<>(team, player, iridiumTeams).getInventory()); + return false; } if (args.length != 2 || !args[0].equalsIgnoreCase("buy")) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } String booster = args[1]; Enhancement enhancement = iridiumTeams.getEnhancementList().get(booster); @@ -35,7 +35,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noSuchBooster .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } boolean success = iridiumTeams.getTeamManager().UpdateEnhancement(team, booster, player); if (success) { @@ -44,6 +44,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%booster%", booster) )); } + return success; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/BypassCommand.java b/src/main/java/com/iridium/iridiumteams/commands/BypassCommand.java index a4a1b450..83f76234 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/BypassCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/BypassCommand.java @@ -11,17 +11,18 @@ @NoArgsConstructor public class BypassCommand> extends Command { - public BypassCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public BypassCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] arguments, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); user.setBypassing(!user.isBypassing()); player.sendMessage(StringUtils.color((user.isBypassing() ? iridiumTeams.getMessages().nowBypassing : iridiumTeams.getMessages().noLongerBypassing) .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/ChatCommand.java b/src/main/java/com/iridium/iridiumteams/commands/ChatCommand.java index a00ccf38..a0096935 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/ChatCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/ChatCommand.java @@ -17,16 +17,16 @@ @NoArgsConstructor public class ChatCommand> extends Command { - public ChatCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public ChatCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } Optional chatType = iridiumTeams.getChatTypes().stream() .filter(type -> type.getAliases().stream().anyMatch(s -> s.equalsIgnoreCase(args[0]))) @@ -36,7 +36,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%type%", args[0])) ); - return; + return false; } String chat = WordUtils.capitalizeFully(chatType.get().getAliases().stream().max(Comparator.comparing(String::length)).orElse(args[0])); @@ -45,6 +45,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%type%", chat)) ); + return true; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/Command.java b/src/main/java/com/iridium/iridiumteams/commands/Command.java index 10ed56a4..318c81eb 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/Command.java +++ b/src/main/java/com/iridium/iridiumteams/commands/Command.java @@ -1,59 +1,83 @@ package com.iridium.iridiumteams.commands; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.iridium.iridiumcore.CooldownProvider; import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; -import lombok.AllArgsConstructor; import org.apache.commons.lang.NotImplementedException; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import java.time.Duration; import java.util.Collections; import java.util.List; import java.util.Optional; -@AllArgsConstructor public class Command> { public final @NotNull List aliases; public final @NotNull String description; public final @NotNull String syntax; public final @NotNull String permission; - public final boolean enabled = true; + public final long cooldownInSeconds; + public final boolean enabled; + @JsonIgnore + private CooldownProvider cooldownProvider; public Command() { this.aliases = Collections.emptyList(); this.description = ""; this.syntax = ""; this.permission = ""; + this.cooldownInSeconds = 0; + this.enabled = true; } + public Command(@NotNull List aliases, @NotNull String description, @NotNull String syntax, @NotNull String permission, long cooldownInSeconds) { + this.aliases = aliases; + this.description = description; + this.syntax = syntax; + this.permission = permission; + this.cooldownInSeconds = cooldownInSeconds; + this.enabled = true; + } + + + public CooldownProvider getCooldownProvider() { + if (cooldownProvider == null) { + this.cooldownProvider = new CooldownProvider<>(Duration.ofSeconds(cooldownInSeconds)); + } - public void execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { + return cooldownProvider; + } + + + public boolean execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { if (!(sender instanceof Player)) { sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().mustBeAPlayer .replace("%prefix%", iridiumTeams.getConfiguration().prefix)) ); - return; + return false; } - execute(iridiumTeams.getUserManager().getUser((OfflinePlayer) sender), arguments, iridiumTeams); + return execute(iridiumTeams.getUserManager().getUser((OfflinePlayer) sender), arguments, iridiumTeams); } - public void execute(U user, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] arguments, IridiumTeams iridiumTeams) { Optional team = iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); if (!team.isPresent()) { user.getPlayer().sendMessage(StringUtils.color(iridiumTeams.getMessages().dontHaveTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix)) ); - return; + return false; } - execute(user, team.get(), arguments, iridiumTeams); + return execute(user, team.get(), arguments, iridiumTeams); } - public void execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { throw new NotImplementedException(); } @@ -61,8 +85,31 @@ public boolean hasPermission(CommandSender commandSender, IridiumTeams iri return commandSender.hasPermission(permission) || permission.equalsIgnoreCase(""); } + public boolean isOnCooldown(CommandSender commandSender, IridiumTeams iridiumTeams) { + if (!(commandSender instanceof Player)) return false; + Player player = (Player) commandSender; + U user = iridiumTeams.getUserManager().getUser(player); + return getCooldownProvider().isOnCooldown(commandSender) && !user.isBypassing(); + } + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + if (commandSender instanceof Player) { + U user = iridiumTeams.getUserManager().getUser((OfflinePlayer) commandSender); + Optional team = iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); + if (team.isPresent()) { + return onTabComplete(user, team.get(), args, iridiumTeams); + } + } return Collections.emptyList(); } + public List onTabComplete(U user, T team, String[] args, IridiumTeams iridiumTeams) { + return Collections.emptyList(); + } + + @JsonIgnore + public boolean isSuperSecretCommand(){ + return false; + } + } diff --git a/src/main/java/com/iridium/iridiumteams/commands/ConfirmableCommand.java b/src/main/java/com/iridium/iridiumteams/commands/ConfirmableCommand.java new file mode 100644 index 00000000..b660bdb0 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/ConfirmableCommand.java @@ -0,0 +1,48 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.gui.ConfirmationGUI; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public abstract class ConfirmableCommand> extends Command { + public final boolean requiresConfirmation; + + public ConfirmableCommand() { + super(); + this.requiresConfirmation = false; + } + + public ConfirmableCommand(@NotNull List aliases, @NotNull String description, @NotNull String syntax, + @NotNull String permission, long cooldownInSeconds, boolean requiresConfirmation) { + super(aliases, description, syntax, permission, cooldownInSeconds); + this.requiresConfirmation = requiresConfirmation; + } + + @Override + public final boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + if (!isCommandValid(user, team, arguments, iridiumTeams)) { + return false; + } + + if (requiresConfirmation) { + Player player = user.getPlayer(); + + player.openInventory(new ConfirmationGUI<>(() -> { + executeAfterConfirmation(user, team, arguments, iridiumTeams); + }, iridiumTeams).getInventory()); + return true; + } + + executeAfterConfirmation(user, team, arguments, iridiumTeams); + return true; + } + + protected abstract boolean isCommandValid(U user, T team, String[] arguments, IridiumTeams iridiumTeams); + + protected abstract void executeAfterConfirmation(U user, T team, String[] arguments, IridiumTeams iridiumTeams); +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/commands/CreateCommand.java b/src/main/java/com/iridium/iridiumteams/commands/CreateCommand.java index 58076aa3..eff2cfc9 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/CreateCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/CreateCommand.java @@ -1,7 +1,6 @@ package com.iridium.iridiumteams.commands; import com.iridium.iridiumcore.utils.StringUtils; -import com.iridium.iridiumteams.CreateCancelledException; import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.Rank; import com.iridium.iridiumteams.database.IridiumUser; @@ -13,22 +12,34 @@ @NoArgsConstructor public class CreateCommand> extends Command { - public CreateCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public CreateCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); - if (args.length < 1) { - player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; - } if (iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().alreadyHaveTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; + } + + if (args.length < 1) { + if (iridiumTeams.getConfiguration().createRequiresName) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + iridiumTeams.getTeamManager().createTeam(player, null).thenAccept(team -> { + if (team == null) return; + user.setUserRank(Rank.OWNER.getId()); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamCreated + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + getCooldownProvider().applyCooldown(player); + }); + return false; } String teamName = String.join(" ", args); @@ -37,31 +48,30 @@ public void execute(U user, String[] args, IridiumTeams iridiumTeams) { .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%min_length%", String.valueOf(iridiumTeams.getConfiguration().minTeamNameLength)) )); - return; + return false; } if (teamName.length() > iridiumTeams.getConfiguration().maxTeamNameLength) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamNameTooLong .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%max_length%", String.valueOf(iridiumTeams.getConfiguration().maxTeamNameLength)) )); - return; + return false; } if (iridiumTeams.getTeamManager().getTeamViaName(teamName).isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamNameAlreadyExists .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; - } - try { - iridiumTeams.getTeamManager().createTeam(player, teamName).thenAccept(team -> { - user.setUserRank(Rank.OWNER.getId()); - player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamCreated - .replace("%prefix%", iridiumTeams.getConfiguration().prefix) - )); - }); - } catch (CreateCancelledException ignored) { - //The create command has been cancelled, ignore + return false; } + iridiumTeams.getTeamManager().createTeam(player, teamName).thenAccept(team -> { + if (team == null) return; + user.setUserRank(Rank.OWNER.getId()); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamCreated + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + getCooldownProvider().applyCooldown(player); + }); + return false; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/DeleteCommand.java b/src/main/java/com/iridium/iridiumteams/commands/DeleteCommand.java index ce89f662..960bacac 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/DeleteCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/DeleteCommand.java @@ -5,39 +5,89 @@ import com.iridium.iridiumteams.Rank; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; -import com.iridium.iridiumteams.gui.ConfirmationGUI; import lombok.NoArgsConstructor; import org.bukkit.entity.Player; import java.util.List; -import java.util.Objects; +import java.util.Optional; @NoArgsConstructor -public class DeleteCommand> extends Command { - public DeleteCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); +public class DeleteCommand> extends ConfirmableCommand { + public String adminPermission; + + public DeleteCommand(List args, String description, String syntax, String permission, long cooldownInSeconds, String adminPermission, boolean requiresConfirmation) { + super(args, description, syntax, permission, cooldownInSeconds, requiresConfirmation); + this.adminPermission = adminPermission; } @Override - public void execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] arguments, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); + if (arguments.length == 1) { + if (!player.hasPermission(adminPermission)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noPermission + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(arguments[0]); + if (!team.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDoesntExistByName + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + return execute(user, team.get(), arguments, iridiumTeams); + } + return super.execute(user, arguments, iridiumTeams); + } + + @Override + protected boolean isCommandValid(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (arguments.length == 1) { + return true; + } + if (user.getUserRank() != Rank.OWNER.getId() && !user.isBypassing()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotDeleteTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } + return true; + } - player.openInventory(new ConfirmationGUI<>(() -> { - iridiumTeams.getTeamManager().deleteTeam(team, user); - iridiumTeams.getTeamManager().getTeamMembers(team).stream() - .map(U::getPlayer) - .filter(Objects::nonNull) - .forEach(member -> member.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDeleted - .replace("%prefix%", iridiumTeams.getConfiguration().prefix) - .replace("%player%", player.getName()) - ))); - }, iridiumTeams).getInventory()); + @Override + protected void executeAfterConfirmation(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + if (arguments.length == 1) { + deleteTeam(user, team, iridiumTeams, true); + } + + deleteTeam(user, team, iridiumTeams, false); + } + + private void deleteTeam(U user, T team, IridiumTeams iridiumTeams, boolean admin) { + Player player = user.getPlayer(); + if (!iridiumTeams.getTeamManager().deleteTeam(team, user)) return; + + for (U member : iridiumTeams.getTeamManager().getTeamMembers(team)) { + member.setTeamID(0); + Player teamMember = member.getPlayer(); + if (teamMember != null) { + teamMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDeleted + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", player.getName()) + )); + } + } + if (admin) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().deletedPlayerTeam + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%name%", team.getName()) + )); + } } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/DeleteWarpCommand.java b/src/main/java/com/iridium/iridiumteams/commands/DeleteWarpCommand.java new file mode 100755 index 00000000..473cb002 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/DeleteWarpCommand.java @@ -0,0 +1,61 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamWarp; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class DeleteWarpCommand> extends Command { + public DeleteWarpCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length != 1 && args.length != 2) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.MANAGE_WARPS)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotManageWarps + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + Optional teamWarp = iridiumTeams.getTeamManager().getTeamWarp(team, args[0]); + if (!teamWarp.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().unknownWarp + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + iridiumTeams.getTeamManager().deleteWarp(teamWarp.get()); + iridiumTeams.getTeamManager().getTeamMembers(team).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(member -> + member.sendMessage(StringUtils.color(iridiumTeams.getMessages().deletedWarp + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", player.getName()) + .replace("%name%", teamWarp.get().getName()) + )) + ); + return true; + } + + @Override + public List onTabComplete(U user, T team, String[] args, IridiumTeams iridiumTeams) { + List teamWarps = iridiumTeams.getTeamManager().getTeamWarps(team); + return teamWarps.stream().map(TeamWarp::getName).collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/DemoteCommand.java b/src/main/java/com/iridium/iridiumteams/commands/DemoteCommand.java index 84e2948b..225c08b2 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/DemoteCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/DemoteCommand.java @@ -17,16 +17,16 @@ @NoArgsConstructor public class DemoteCommand> extends Command { - public DemoteCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public DemoteCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } OfflinePlayer targetPlayer = Bukkit.getServer().getOfflinePlayer(args[0]); @@ -36,31 +36,31 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea player.sendMessage(StringUtils.color(iridiumTeams.getMessages().userNotInYourTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } int nextRank = targetUser.getUserRank() - 1; - if (!iridiumTeams.getUserRanks().containsKey(nextRank) || nextRank < 1 || (targetUser.getUserRank() >= user.getUserRank() && user.getUserRank() != Rank.OWNER.getId() && !user.isBypassing()) || !iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.DEMOTE)) { + if (!DoesRankExist(nextRank, iridiumTeams) || IsHigherRank(targetUser, user) || !iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.DEMOTE)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotDemoteUser .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } targetUser.setUserRank(nextRank); for (U member : iridiumTeams.getTeamManager().getTeamMembers(team)) { - Player islandMember = Bukkit.getPlayer(member.getUuid()); - if (islandMember != null) { - if (islandMember.equals(player)) { - islandMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().demotedPlayer + Player teamMember = Bukkit.getPlayer(member.getUuid()); + if (teamMember != null) { + if (teamMember.equals(player)) { + teamMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().demotedPlayer .replace("%player%", targetUser.getName()) .replace("%rank%", iridiumTeams.getUserRanks().get(nextRank).name) .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); } else { - islandMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().userDemotedPlayer + teamMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().userDemotedPlayer .replace("%demoter%", player.getName()) .replace("%player%", targetUser.getName()) .replace("%rank%", iridiumTeams.getUserRanks().get(nextRank).name) @@ -69,6 +69,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea } } } + return true; } @Override @@ -76,4 +77,16 @@ public List onTabComplete(CommandSender commandSender, String[] args, Ir return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); } + private boolean DoesRankExist(int rank, IridiumTeams iridiumTeams) { + if (rank < 1) return false; + return iridiumTeams.getUserRanks().containsKey(rank); + } + + private boolean IsHigherRank(U target, U user) { + if (target.getUserRank() == Rank.OWNER.getId()) return true; + if (user.getUserRank() == Rank.OWNER.getId()) return false; + if (user.isBypassing()) return false; + return target.getUserRank() >= user.getUserRank(); + } + } diff --git a/src/main/java/com/iridium/iridiumteams/commands/DepositCommand.java b/src/main/java/com/iridium/iridiumteams/commands/DepositCommand.java index bd1dcb43..be5d5607 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/DepositCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/DepositCommand.java @@ -18,35 +18,36 @@ @NoArgsConstructor public class DepositCommand> extends Command { - public DepositCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public DepositCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 2) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } Optional bankItem = iridiumTeams.getBankItemList().stream().filter(item -> item.getName().equalsIgnoreCase(args[0])).findFirst(); if (!bankItem.isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noSuchBankItem.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } try { TeamBank teamBank = iridiumTeams.getTeamManager().getTeamBank(team, bankItem.get().getName()); BankResponse bankResponse = bankItem.get().deposit(player, Double.parseDouble(args[1]), teamBank, iridiumTeams); - if (bankResponse.isSuccess()) teamBank.setNumber(teamBank.getNumber() + bankResponse.getAmount()); player.sendMessage(StringUtils.color((bankResponse.isSuccess() ? iridiumTeams.getMessages().bankDeposited : iridiumTeams.getMessages().insufficientFundsToDeposit) .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%amount%", String.valueOf(bankResponse.getAmount())) .replace("%type%", bankItem.get().getName()) )); + return true; } catch (NumberFormatException exception) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notANumber.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/DescriptionCommand.java b/src/main/java/com/iridium/iridiumteams/commands/DescriptionCommand.java index e9eb9755..f7b6f737 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/DescriptionCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/DescriptionCommand.java @@ -8,29 +8,55 @@ import lombok.NoArgsConstructor; import org.bukkit.entity.Player; +import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.Optional; @NoArgsConstructor public class DescriptionCommand> extends Command { - public DescriptionCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public String adminPermission; + + public DescriptionCommand(List args, String description, String syntax, String permission, long cooldownInSeconds, String adminPermission) { + super(args, description, syntax, permission, cooldownInSeconds); + this.adminPermission = adminPermission; } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length == 0) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; + } + Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(args[0]); + if (team.isPresent() && player.hasPermission(adminPermission)) { + String description = String.join(" ", Arrays.copyOfRange(args, 1, args.length)); + changeDescription(team.get(), description, player, iridiumTeams); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().changedPlayerDescription + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%name%", team.get().getName()) + .replace("%description%", description) + )); + return true; } + return super.execute(user, args, iridiumTeams); + } + + @Override + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.DESCRIPTION)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotChangeDescription .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } - String description = String.join(" ", args); + changeDescription(team, String.join(" ", arguments), player, iridiumTeams); + return true; + } + + private void changeDescription(T team, String description, Player player, IridiumTeams iridiumTeams) { team.setDescription(description); iridiumTeams.getTeamManager().getTeamMembers(team).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(member -> member.sendMessage(StringUtils.color(iridiumTeams.getMessages().descriptionChanged @@ -40,5 +66,4 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea )) ); } - } diff --git a/src/main/java/com/iridium/iridiumteams/commands/EditWarpCommand.java b/src/main/java/com/iridium/iridiumteams/commands/EditWarpCommand.java new file mode 100755 index 00000000..53c2fe72 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/EditWarpCommand.java @@ -0,0 +1,98 @@ +package com.iridium.iridiumteams.commands; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamWarp; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class EditWarpCommand> extends Command { + public EditWarpCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length < 2) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.MANAGE_WARPS)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotManageWarps + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + Optional teamWarp = iridiumTeams.getTeamManager().getTeamWarp(team, args[0]); + if (!teamWarp.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().unknownWarp + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + switch (args[1]) { + case "icon": + if (args.length != 3) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + Optional xMaterial = XMaterial.matchXMaterial(args[2]); + if (!xMaterial.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noSuchMaterial + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + teamWarp.get().setIcon(xMaterial.get()); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().warpIconSet + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return true; + case "description": + if (args.length < 3) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + String description = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); + teamWarp.get().setDescription(description); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().warpDescriptionSet + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return true; + default: + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + } + + @Override + public List onTabComplete(U user, T team, String[] args, IridiumTeams iridiumTeams) { + List teamWarps = iridiumTeams.getTeamManager().getTeamWarps(team); + switch (args.length) { + case 1: + return teamWarps.stream().map(TeamWarp::getName).collect(Collectors.toList()); + case 2: + return Arrays.asList("icon", "description"); + case 3: + if (args[1].equalsIgnoreCase("icon")) { + return Arrays.stream(XMaterial.values()).map(XMaterial::name).collect(Collectors.toList()); + } + default: + return Collections.emptyList(); + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/ExperienceCommand.java b/src/main/java/com/iridium/iridiumteams/commands/ExperienceCommand.java new file mode 100755 index 00000000..e83feefb --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/ExperienceCommand.java @@ -0,0 +1,121 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.gui.BankGUI; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class ExperienceCommand> extends Command { + public String adminPermission; + + public ExperienceCommand(List args, String description, String syntax, String permission, long cooldownInSeconds, String adminPermission) { + super(args, description, syntax, permission, cooldownInSeconds); + this.adminPermission = adminPermission; + } + + @Override + public boolean execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { + if (arguments.length == 3) { + Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(arguments[1]); + if (!team.isPresent()) { + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDoesntExistByName + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + int amount; + try { + amount = Integer.parseInt(arguments[2]); + } catch (NumberFormatException exception) { + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().notANumber + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + if (!sender.hasPermission(adminPermission)) { + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().noPermission + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + switch (arguments[0].toLowerCase()) { + case "give": + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().gaveExperience + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", arguments[1]) + .replace("%amount%", String.valueOf(amount)) + )); + + team.get().setExperience(team.get().getExperience() + amount); + return true; + case "remove": + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().removedExperience + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", arguments[1]) + .replace("%amount%", String.valueOf(Math.min(amount, team.get().getExperience()))) + )); + + team.get().setExperience(team.get().getExperience() - amount); + return true; + case "set": + sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().setExperience + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", arguments[1]) + .replace("%amount%", String.valueOf(Math.max(amount, 0))) + )); + + team.get().setExperience(amount); + return true; + default: + sender.sendMessage(StringUtils.color(syntax + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + } + if (arguments.length != 0) { + sender.sendMessage(StringUtils.color(syntax + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + return iridiumTeams.getCommandManager().executeCommand(sender, iridiumTeams.getCommands().infoCommand, arguments); + } + + @Override + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + player.openInventory(new BankGUI<>(team, player, iridiumTeams).getInventory()); + return true; + } + + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + if (!commandSender.hasPermission(adminPermission)) return Collections.emptyList(); + switch (args.length) { + case 1: + return Arrays.asList("give", "set", "remove"); + case 2: + return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); + case 3: + return Arrays.asList("1", "10", "100"); + default: + return Collections.emptyList(); + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/FlyCommand.java b/src/main/java/com/iridium/iridiumteams/commands/FlyCommand.java index 583e58ce..672a169a 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/FlyCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/FlyCommand.java @@ -4,32 +4,34 @@ import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; -import com.iridium.iridiumteams.database.TeamEnhancement; -import com.iridium.iridiumteams.enhancements.Enhancement; -import com.iridium.iridiumteams.enhancements.FlightEnhancementData; +import lombok.Getter; import lombok.NoArgsConstructor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Arrays; import java.util.List; -import java.util.Optional; @NoArgsConstructor public class FlyCommand> extends Command { - public FlyCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + + @Getter + String flyAnywherePermission; + + public FlyCommand(List args, String description, String syntax, String permission, String flyAnywherePermission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + this.flyAnywherePermission = flyAnywherePermission; } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); boolean flight = !user.isFlying(); if (args.length == 1) { if (!args[0].equalsIgnoreCase("enable") && !args[0].equalsIgnoreCase("disable") && !args[0].equalsIgnoreCase("on") && !args[0].equalsIgnoreCase("off")) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } flight = args[0].equalsIgnoreCase("enable") || args[0].equalsIgnoreCase("on"); @@ -37,7 +39,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea if (!canFly(player, iridiumTeams)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().flightNotActive.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } user.setFlying(flight); @@ -49,6 +51,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea } else { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().flightDisabled.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); } + return true; } @Override @@ -58,23 +61,7 @@ public boolean hasPermission(CommandSender commandSender, IridiumTeams iri public boolean canFly(Player player, IridiumTeams iridiumTeams) { U user = iridiumTeams.getUserManager().getUser(player); - if (player.hasPermission(permission)) return true; - if (user.isBypassing()) return true; - Optional team = iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); - Optional visitor = iridiumTeams.getTeamManager().getTeamViaLocation(player.getLocation()); - return canFly(user, team.orElse(null), iridiumTeams) || canFly(user, visitor.orElse(null), iridiumTeams); - } - - private boolean canFly(U user, T team, IridiumTeams iridiumTeams) { - if (team == null) return false; - Enhancement flightEnhancement = iridiumTeams.getEnhancements().flightEnhancement; - TeamEnhancement teamEnhancement = iridiumTeams.getTeamManager().getTeamEnhancement(team, "flight"); - FlightEnhancementData data = flightEnhancement.levels.get(teamEnhancement.getLevel()); - - if (!teamEnhancement.isActive(flightEnhancement.type)) return false; - if (data == null) return false; - - return user.canApply(iridiumTeams, team, data.enhancementAffectsType); + return user.canFly(iridiumTeams); } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/HelpCommand.java b/src/main/java/com/iridium/iridiumteams/commands/HelpCommand.java index 7af588b2..c44a7391 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/HelpCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/HelpCommand.java @@ -18,13 +18,14 @@ @NoArgsConstructor public class HelpCommand> extends Command { - public HelpCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public HelpCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(CommandSender sender, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(CommandSender sender, String[] args, IridiumTeams iridiumTeams) { List> availableCommands = iridiumTeams.getCommandManager().getCommands().stream() + .filter(command -> !command.isSuperSecretCommand()) .filter(command -> sender.hasPermission(command.permission) || command.permission.isEmpty()) .collect(Collectors.toList()); @@ -75,7 +76,7 @@ public void execute(CommandSender sender, String[] args, IridiumTeams irid if (sender instanceof Player) { ((Player) sender).spigot().sendMessage(previousButton, footerText, nextButton); } - + return true; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/HomeCommand.java b/src/main/java/com/iridium/iridiumteams/commands/HomeCommand.java index f3239212..9d0c5ea8 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/HomeCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/HomeCommand.java @@ -12,30 +12,32 @@ @NoArgsConstructor public class HomeCommand> extends Command { - public HomeCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public HomeCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); Location home = team.getHome(); if (home == null) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().homeNotSet .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } if (iridiumTeams.getTeamManager().getTeamViaLocation(home).map(T::getId).orElse(0) != team.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().homeNotInTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } - player.teleport(home); - player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teleportingHome - .replace("%prefix%", iridiumTeams.getConfiguration().prefix) - )); + if (iridiumTeams.getTeamManager().teleport(player, home, team)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teleportingHome + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + } + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/InfoCommand.java b/src/main/java/com/iridium/iridiumteams/commands/InfoCommand.java index 577af963..cb70a79b 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/InfoCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/InfoCommand.java @@ -16,12 +16,12 @@ @NoArgsConstructor public class InfoCommand> extends Command { - public InfoCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public InfoCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length == 0) { Optional userTeam = iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); @@ -29,19 +29,26 @@ public void execute(U user, String[] args, IridiumTeams iridiumTeams) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().dontHaveTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } sendTeamInfo(player, userTeam.get(), iridiumTeams); - return; + return true; } + Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(String.join(" ", args)); + if(args[0].equals("location")) { + team = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player); + } + if (!team.isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDoesntExistByName .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } + sendTeamInfo(player, team.get(), iridiumTeams); + return true; } public void sendTeamInfo(Player player, T team, IridiumTeams iridiumTeams) { diff --git a/src/main/java/com/iridium/iridiumteams/commands/InviteCommand.java b/src/main/java/com/iridium/iridiumteams/commands/InviteCommand.java index 0c8b5cd5..4a48d269 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/InviteCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/InviteCommand.java @@ -15,42 +15,42 @@ @NoArgsConstructor public class InviteCommand> extends Command { - public InviteCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public InviteCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.INVITE)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotInvite .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } Player invitee = Bukkit.getServer().getPlayer(args[0]); if (invitee == null) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notAPlayer .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } U offlinePlayerUser = iridiumTeams.getUserManager().getUser(invitee); if (offlinePlayerUser.getTeamID() == team.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().userAlreadyInTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } if (iridiumTeams.getTeamManager().getTeamInvite(team, offlinePlayerUser).isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().inviteAlreadyPresent .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } iridiumTeams.getTeamManager().createTeamInvite(team, offlinePlayerUser, user); @@ -62,6 +62,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%player%", player.getName()) )); + return true; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/InvitesCommand.java b/src/main/java/com/iridium/iridiumteams/commands/InvitesCommand.java index c3a60953..8cded147 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/InvitesCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/InvitesCommand.java @@ -11,14 +11,15 @@ @NoArgsConstructor public class InvitesCommand> extends Command { - public InvitesCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public InvitesCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); - player.openInventory(new InvitesGUI<>(team, player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); + player.openInventory(new InvitesGUI<>(team, player, iridiumTeams).getInventory()); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/JoinCommand.java b/src/main/java/com/iridium/iridiumteams/commands/JoinCommand.java index 87bdf0c1..50090a90 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/JoinCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/JoinCommand.java @@ -2,9 +2,12 @@ import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; import com.iridium.iridiumteams.database.TeamInvite; +import com.iridium.iridiumteams.database.TeamSetting; +import com.iridium.iridiumteams.enhancements.MembersEnhancementData; import lombok.NoArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -16,36 +19,45 @@ @NoArgsConstructor public class JoinCommand> extends Command { - public JoinCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public JoinCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } if (iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().alreadyHaveTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(args[0]); if (!team.isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDoesntExistByName .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team.get(), SettingType.TEAM_TYPE.getSettingKey()); Optional teamInvite = iridiumTeams.getTeamManager().getTeamInvite(team.get(), user); - if (!teamInvite.isPresent() && !user.isBypassing()) { + if (!teamInvite.isPresent() && !user.isBypassing() && teamSetting != null && !teamSetting.getValue().equalsIgnoreCase("public")) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noActiveInvite .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; + } + + MembersEnhancementData data = iridiumTeams.getEnhancements().membersEnhancement.levels.get(iridiumTeams.getTeamManager().getTeamEnhancement(team.get(), "members").getLevel()); + if (iridiumTeams.getTeamManager().getTeamMembers(team.get()).size() >= (data == null ? 0 : data.members)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().memberLimitReached + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; } user.setTeam(team.get()); @@ -66,6 +78,7 @@ public void execute(U user, String[] args, IridiumTeams iridiumTeams) { )); } }); + return true; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/KickCommand.java b/src/main/java/com/iridium/iridiumteams/commands/KickCommand.java index 1a866af3..6c4df9e2 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/KickCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/KickCommand.java @@ -8,50 +8,59 @@ import com.iridium.iridiumteams.database.Team; import lombok.NoArgsConstructor; import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; @NoArgsConstructor public class KickCommand> extends Command { - public KickCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public KickCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.KICK)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotKick .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } - U kickedPlayer = iridiumTeams.getUserManager().getUser(Bukkit.getServer().getOfflinePlayer(args[0])); + OfflinePlayer offlinePlayer = Bukkit.getServer().getOfflinePlayer(args[0]); + U kickedPlayer = iridiumTeams.getUserManager().getUser(offlinePlayer); if (team.getId() != kickedPlayer.getTeamID()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().userNotInYourTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } - if (kickedPlayer.getUserRank() >= user.getUserRank() && !user.isBypassing() && user.getUserRank() != Rank.OWNER.getId()) { + if (offlinePlayer.getUniqueId() == player.getUniqueId()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotKickYourself + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + if ((kickedPlayer.getUserRank() >= user.getUserRank() || kickedPlayer.getUserRank() == Rank.OWNER.getId()) && !user.isBypassing() && user.getUserRank() != Rank.OWNER.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotKickHigherRank .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } kickedPlayer.setTeam(null); - kickedPlayer.getPlayer().sendMessage(StringUtils.color(iridiumTeams.getMessages().youHaveBeenKicked + Optional.ofNullable(kickedPlayer.getPlayer()).ifPresent(player1 -> player1.sendMessage(StringUtils.color(iridiumTeams.getMessages().youHaveBeenKicked .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%player%", player.getName()) - )); + ))); iridiumTeams.getTeamManager().getTeamMembers(team).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(player1 -> player1.sendMessage(StringUtils.color(iridiumTeams.getMessages().playerKicked .replace("%prefix%", iridiumTeams.getConfiguration().prefix) @@ -59,6 +68,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%kicker%", player.getName()) )) ); + return true; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/LeaveCommand.java b/src/main/java/com/iridium/iridiumteams/commands/LeaveCommand.java index eb414294..dd5f25b9 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/LeaveCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/LeaveCommand.java @@ -2,6 +2,7 @@ import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.Rank; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; import lombok.NoArgsConstructor; @@ -12,14 +13,21 @@ @NoArgsConstructor public class LeaveCommand> extends Command { - public LeaveCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public LeaveCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); + if (user.getUserRank() == Rank.OWNER.getId()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().ownerCannotLeave + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().leftTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%name%", team.getName()) @@ -37,6 +45,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea }); user.setTeam(null); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/LevelCommand.java b/src/main/java/com/iridium/iridiumteams/commands/LevelCommand.java new file mode 100644 index 00000000..7ebe89d6 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/LevelCommand.java @@ -0,0 +1,67 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class LevelCommand> extends Command { + + public LevelCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length == 0) { + Optional userTeam = iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); + if (!userTeam.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().dontHaveTeam + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + sendTeamLevel(player, userTeam.get(), iridiumTeams); + return true; + } + + Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(String.join(" ", args)); + if(args[0].equals("location")) { + team = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player); + } + + if (!team.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamDoesntExistByName + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + sendTeamLevel(player, team.get(), iridiumTeams); + return true; + } + + public void sendTeamLevel(Player player, T team, IridiumTeams iridiumTeams) { + List placeholderList = iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(team); + player.sendMessage(StringUtils.color(StringUtils.getCenteredMessage(StringUtils.processMultiplePlaceholders(iridiumTeams.getConfiguration().teamInfoTitle, placeholderList), iridiumTeams.getConfiguration().teamInfoTitleFiller))); + for (String line : iridiumTeams.getConfiguration().levelInfo) { + player.sendMessage(StringUtils.color(StringUtils.processMultiplePlaceholders(line, placeholderList))); + } + } + + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/commands/MembersCommand.java b/src/main/java/com/iridium/iridiumteams/commands/MembersCommand.java index e8ae2ab4..61b29dd7 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/MembersCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/MembersCommand.java @@ -11,14 +11,15 @@ @NoArgsConstructor public class MembersCommand> extends Command { - public MembersCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public MembersCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); - player.openInventory(new MembersGUI<>(team, player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); + player.openInventory(new MembersGUI<>(team, player, iridiumTeams).getInventory()); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/MissionsCommand.java b/src/main/java/com/iridium/iridiumteams/commands/MissionsCommand.java new file mode 100755 index 00000000..e303da70 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/MissionsCommand.java @@ -0,0 +1,84 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.inventories.MissionTypeSelectorInventoryConfig; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.gui.MissionGUI; +import com.iridium.iridiumteams.gui.MissionTypeSelectorGUI; +import com.iridium.iridiumteams.missions.MissionType; +import lombok.NoArgsConstructor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +@NoArgsConstructor +public class MissionsCommand> extends Command { + public MissionsCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + MissionTypeSelectorInventoryConfig missionTypeSelectorInventoryConfig = iridiumTeams.getInventories().missionTypeSelectorGUI; + if (args.length == 1) { + switch (args[0].toLowerCase()) { + case "daily": + if (missionTypeSelectorInventoryConfig.daily.enabled) { + player.openInventory(new MissionGUI<>(team, MissionType.DAILY, player, iridiumTeams).getInventory()); + } else { + player.openInventory(new MissionTypeSelectorGUI<>(player, iridiumTeams).getInventory()); + } + return true; + case "weekly": + if (missionTypeSelectorInventoryConfig.weekly.enabled) { + player.openInventory(new MissionGUI<>(team, MissionType.WEEKLY, player, iridiumTeams).getInventory()); + } else { + player.openInventory(new MissionTypeSelectorGUI<>(player, iridiumTeams).getInventory()); + } + return true; + case "infinite": + if (missionTypeSelectorInventoryConfig.infinite.enabled) { + player.openInventory(new MissionGUI<>(team, MissionType.INFINITE, player, iridiumTeams).getInventory()); + } else { + player.openInventory(new MissionTypeSelectorGUI<>(player, iridiumTeams).getInventory()); + } + return true; + case "once": + if (missionTypeSelectorInventoryConfig.once.enabled) { + player.openInventory(new MissionGUI<>(team, MissionType.ONCE, player, iridiumTeams).getInventory()); + } else { + player.openInventory(new MissionTypeSelectorGUI<>(player, iridiumTeams).getInventory()); + } + return true; + } + } + player.openInventory(new MissionTypeSelectorGUI<>(player, iridiumTeams).getInventory()); + return true; + } + + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + MissionTypeSelectorInventoryConfig missionTypeSelectorInventoryConfig = iridiumTeams.getInventories().missionTypeSelectorGUI; + List missionTypes = new ArrayList<>(); + if (missionTypeSelectorInventoryConfig.daily.enabled) { + missionTypes.add("Daily"); + } + + if (missionTypeSelectorInventoryConfig.weekly.enabled) { + missionTypes.add("Weekly"); + } + + if (missionTypeSelectorInventoryConfig.infinite.enabled) { + missionTypes.add("Infinite"); + } + + if (missionTypeSelectorInventoryConfig.once.enabled) { + missionTypes.add("Once"); + } + return missionTypes; + } +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/PermissionsCommand.java b/src/main/java/com/iridium/iridiumteams/commands/PermissionsCommand.java index 960eb33d..a3f5089d 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/PermissionsCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/PermissionsCommand.java @@ -17,24 +17,25 @@ @NoArgsConstructor public class PermissionsCommand> extends Command { - public PermissionsCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public PermissionsCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length == 0) { - player.openInventory(new RanksGUI<>(team, player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); - return; + player.openInventory(new RanksGUI<>(team, player, iridiumTeams).getInventory()); + return false; } String rank = args[0]; for (Map.Entry userRank : iridiumTeams.getUserRanks().entrySet()) { if (!userRank.getValue().name.equalsIgnoreCase(rank)) continue; - player.openInventory(new PermissionsGUI<>(team, userRank.getKey(), player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); - return; + player.openInventory(new PermissionsGUI<>(team, userRank.getKey(), player, iridiumTeams).getInventory()); + return true; } player.sendMessage(StringUtils.color(iridiumTeams.getMessages().invalidUserRank.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/PromoteCommand.java b/src/main/java/com/iridium/iridiumteams/commands/PromoteCommand.java index ee374823..46353494 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/PromoteCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/PromoteCommand.java @@ -17,16 +17,16 @@ @NoArgsConstructor public class PromoteCommand> extends Command { - public PromoteCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public PromoteCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } OfflinePlayer targetPlayer = Bukkit.getServer().getOfflinePlayer(args[0]); @@ -34,29 +34,29 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea if (targetUser.getTeamID() != team.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().userNotInYourTeam.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } int nextRank = targetUser.getUserRank() + 1; - if (!iridiumTeams.getUserRanks().containsKey(nextRank) || (nextRank >= user.getUserRank() && user.getUserRank() != Rank.OWNER.getId() && !user.isBypassing()) || !iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.PROMOTE)) { + if (!DoesRankExist(nextRank, iridiumTeams) || IsHigherRank(targetUser, user) || !iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.PROMOTE)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotPromoteUser.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } targetUser.setUserRank(nextRank); for (U member : iridiumTeams.getTeamManager().getTeamMembers(team)) { - Player islandMember = Bukkit.getPlayer(member.getUuid()); - if (islandMember != null) { - if (islandMember.equals(player)) { - islandMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().promotedPlayer + Player teamMember = Bukkit.getPlayer(member.getUuid()); + if (teamMember != null) { + if (teamMember.equals(player)) { + teamMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().promotedPlayer .replace("%player%", targetUser.getName()) .replace("%rank%", iridiumTeams.getUserRanks().get(nextRank).name) .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); } else { - islandMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().userPromotedPlayer + teamMember.sendMessage(StringUtils.color(iridiumTeams.getMessages().userPromotedPlayer .replace("%promoter%", player.getName()) .replace("%player%", targetUser.getName()) .replace("%rank%", iridiumTeams.getUserRanks().get(nextRank).name) @@ -65,6 +65,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea } } } + return true; } @Override @@ -72,4 +73,16 @@ public List onTabComplete(CommandSender commandSender, String[] args, Ir return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); } + private boolean DoesRankExist(int rank, IridiumTeams iridiumTeams) { + if (rank < 1) return false; + return iridiumTeams.getUserRanks().containsKey(rank); + } + + private boolean IsHigherRank(U target, U user) { + if (target.getUserRank() == Rank.OWNER.getId()) return true; + if (user.getUserRank() == Rank.OWNER.getId()) return false; + if (user.isBypassing()) return false; + return target.getUserRank() + 1 >= user.getUserRank(); + } + } diff --git a/src/main/java/com/iridium/iridiumteams/commands/RecalculateCommand.java b/src/main/java/com/iridium/iridiumteams/commands/RecalculateCommand.java index c82a58fe..089a4b3d 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/RecalculateCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/RecalculateCommand.java @@ -13,17 +13,17 @@ @NoArgsConstructor public class RecalculateCommand> extends Command { - public RecalculateCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public RecalculateCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { if (iridiumTeams.isRecalculating()) { sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().calculationAlreadyInProcess .replace("%prefix%", iridiumTeams.getConfiguration().prefix)) ); - return; + return false; } int interval = iridiumTeams.getConfiguration().forceRecalculateInterval; @@ -41,6 +41,7 @@ public void execute(CommandSender sender, String[] arguments, IridiumTeams )); } iridiumTeams.setRecalculating(true); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/ReloadCommand.java b/src/main/java/com/iridium/iridiumteams/commands/ReloadCommand.java index 457e0b4f..089c0c68 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/ReloadCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/ReloadCommand.java @@ -11,14 +11,15 @@ @NoArgsConstructor public class ReloadCommand> extends Command { - public ReloadCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public ReloadCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(CommandSender sender, String[] arguments, IridiumTeams iridiumTeams) { iridiumTeams.loadConfigs(); sender.sendMessage(StringUtils.color(iridiumTeams.getMessages().reloaded.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/RenameCommand.java b/src/main/java/com/iridium/iridiumteams/commands/RenameCommand.java index 3f479243..33458fb6 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/RenameCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/RenameCommand.java @@ -8,50 +8,76 @@ import lombok.NoArgsConstructor; import org.bukkit.entity.Player; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; @NoArgsConstructor public class RenameCommand> extends Command { - public RenameCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public String adminPermission; + + public RenameCommand(List args, String description, String syntax, String permission, long cooldownInSeconds, String adminPermission) { + super(args, description, syntax, permission, cooldownInSeconds); + this.adminPermission = adminPermission; } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length == 0) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; + } + Optional team = iridiumTeams.getTeamManager().getTeamViaNameOrPlayer(args[0]); + if (team.isPresent() && player.hasPermission(adminPermission)) { + String name = String.join(" ", Arrays.copyOfRange(args, 1, args.length)); + if(changeName(team.get(), name, player, iridiumTeams)){ + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().changedPlayerName + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%name%", team.get().getName()) + .replace("%player%", args[0]) + )); + return true; + } + return false; } + return super.execute(user, args, iridiumTeams); + } + + @Override + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.RENAME)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotChangeName .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } - String name = String.join(" ", args); + return changeName(team, String.join(" ", arguments), player, iridiumTeams); + } + + private boolean changeName(T team, String name, Player player, IridiumTeams iridiumTeams) { Optional teamViaName = iridiumTeams.getTeamManager().getTeamViaName(name); if (teamViaName.isPresent() && teamViaName.get().getId() != team.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamNameAlreadyExists .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } if (name.length() < iridiumTeams.getConfiguration().minTeamNameLength) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamNameTooShort .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%min_length%", String.valueOf(iridiumTeams.getConfiguration().minTeamNameLength)) )); - return; + return false; } if (name.length() > iridiumTeams.getConfiguration().maxTeamNameLength) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamNameTooLong .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%max_length%", String.valueOf(iridiumTeams.getConfiguration().maxTeamNameLength)) )); - return; + return false; } team.setName(name); iridiumTeams.getTeamManager().getTeamMembers(team).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(member -> @@ -61,6 +87,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%name%", name) )) ); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/RewardsCommand.java b/src/main/java/com/iridium/iridiumteams/commands/RewardsCommand.java new file mode 100755 index 00000000..81ca6ec2 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/RewardsCommand.java @@ -0,0 +1,25 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.gui.RewardsGUI; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.List; + +@NoArgsConstructor +public class RewardsCommand> extends Command { + public RewardsCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + player.openInventory(new RewardsGUI<>(team, player, iridiumTeams).getInventory()); + return true; + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/SetHomeCommand.java b/src/main/java/com/iridium/iridiumteams/commands/SetHomeCommand.java index a2e76197..a8e78648 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/SetHomeCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/SetHomeCommand.java @@ -10,27 +10,28 @@ import java.util.List; import java.util.Objects; + @NoArgsConstructor public class SetHomeCommand> extends Command { - public SetHomeCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public SetHomeCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (iridiumTeams.getTeamManager().getTeamViaLocation(player.getLocation()).map(T::getId).orElse(0) != team.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notInTeamLand .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.SETHOME)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotSetHome .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } team.setHome(player.getLocation()); iridiumTeams.getTeamManager().getTeamMembers(team).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(member -> @@ -39,6 +40,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%player%", player.getName()) )) ); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/SetPermissionCommand.java b/src/main/java/com/iridium/iridiumteams/commands/SetPermissionCommand.java index e07edb77..47daeb7b 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/SetPermissionCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/SetPermissionCommand.java @@ -13,19 +13,20 @@ import java.util.*; import java.util.stream.Collectors; + @NoArgsConstructor public class SetPermissionCommand> extends Command { - public SetPermissionCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public SetPermissionCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 2 && (args.length != 3 || !args[2].equalsIgnoreCase("true") && !args[2].equalsIgnoreCase("false"))) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } Optional permission = iridiumTeams.getPermissionList().keySet().stream() .filter(s -> s.equalsIgnoreCase(args[0])) @@ -34,7 +35,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea player.sendMessage(StringUtils.color(iridiumTeams.getMessages().invalidPermission .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } Optional rank = iridiumTeams.getUserRanks().entrySet().stream() .filter(r -> r.getValue().name.equalsIgnoreCase(args[1])) @@ -44,14 +45,14 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea player.sendMessage(StringUtils.color(iridiumTeams.getMessages().invalidUserRank .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } boolean allowed = args.length == 2 ? !iridiumTeams.getTeamManager().getTeamPermission(team, rank.get(), permission.get()) : args[2].equalsIgnoreCase("true"); if ((user.getUserRank() <= rank.get() && user.getUserRank() != Rank.OWNER.getId()) || !iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.CHANGE_PERMISSIONS) || rank.get() == Rank.OWNER.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotChangePermissions .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } iridiumTeams.getTeamManager().setTeamPermission(team, rank.get(), permission.get(), allowed); player.sendMessage(StringUtils.color(iridiumTeams.getMessages().permissionSet @@ -61,6 +62,7 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%allowed%", String.valueOf(allowed)) )); + return true; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/SetWarpCommand.java b/src/main/java/com/iridium/iridiumteams/commands/SetWarpCommand.java new file mode 100755 index 00000000..28d6c56f --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/SetWarpCommand.java @@ -0,0 +1,71 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.enhancements.WarpsEnhancementData; +import com.iridium.iridiumteams.utils.LocationUtils; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.List; + +@NoArgsConstructor +public class SetWarpCommand> extends Command { + public SetWarpCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length != 1 && args.length != 2) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + if (!LocationUtils.isSafe(player.getLocation(), iridiumTeams)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notSafe + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + if (iridiumTeams.getTeamManager().getTeamViaLocation(player.getLocation()).map(T::getId).orElse(0) != team.getId()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notInTeamLand + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.MANAGE_WARPS)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotManageWarps + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + WarpsEnhancementData data = iridiumTeams.getEnhancements().warpsEnhancement.levels.get(iridiumTeams.getTeamManager().getTeamEnhancement(team, "warps").getLevel()); + if (iridiumTeams.getTeamManager().getTeamWarps(team).size() >= (data == null ? 0 : data.warps)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().warpLimitReached + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + if (iridiumTeams.getTeamManager().getTeamWarp(team, args[0]).isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().warpAlreadyExists + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + iridiumTeams.getTeamManager().createWarp(team, player.getUniqueId(), player.getLocation(), args[0], args.length == 2 ? args[1] : null); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().createdWarp + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%name%", args[0]) + )); + + return true; + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/SettingsCommand.java b/src/main/java/com/iridium/iridiumteams/commands/SettingsCommand.java new file mode 100755 index 00000000..b1474441 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/SettingsCommand.java @@ -0,0 +1,89 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.Setting; +import com.iridium.iridiumteams.api.SettingUpdateEvent; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import com.iridium.iridiumteams.gui.SettingsGUI; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class SettingsCommand> extends Command { + public SettingsCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length == 0) { + player.openInventory(new SettingsGUI<>(team, player, iridiumTeams).getInventory()); + return true; + } else if (args.length == 2) { + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.SETTINGS)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotChangeSettings + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + String settingKey = args[0]; + for (Map.Entry setting : iridiumTeams.getSettingsList().entrySet()) { + if (!setting.getValue().getDisplayName().equalsIgnoreCase(settingKey)) continue; + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, setting.getKey()); + Optional value = setting.getValue().getValues().stream().filter(s -> s.equalsIgnoreCase(args[1])).findFirst(); + + if (!value.isPresent() || teamSetting == null) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().invalidSettingValue + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + teamSetting.setValue(value.get()); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().settingSet + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%setting%", setting.getValue().getDisplayName()) + .replace("%value%", value.get()) + )); + + Bukkit.getPluginManager().callEvent(new SettingUpdateEvent<>(team, user, setting.getKey(), value.get())); + return true; + } + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().invalidSetting + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + switch (args.length) { + case 1: + return iridiumTeams.getSettingsList().values().stream().map(Setting::getDisplayName).collect(Collectors.toList()); + case 2: + for (Map.Entry setting : iridiumTeams.getSettingsList().entrySet()) { + if (!setting.getValue().getDisplayName().equalsIgnoreCase(args[0])) continue; + return setting.getValue().getValues(); + } + default: + return Collections.emptyList(); + } + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/ShopCommand.java b/src/main/java/com/iridium/iridiumteams/commands/ShopCommand.java new file mode 100755 index 00000000..3657810e --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/ShopCommand.java @@ -0,0 +1,51 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.gui.ShopCategoryGUI; +import com.iridium.iridiumteams.gui.ShopOverviewGUI; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; + +@NoArgsConstructor +public class ShopCommand> extends Command { + + public ShopCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (arguments.length == 0) { + player.openInventory(new ShopOverviewGUI<>(player, iridiumTeams).getInventory()); + return true; + } + + Optional categoryName = getCategoryName(String.join(" ", arguments), iridiumTeams); + + if (!categoryName.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noShopCategory + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + player.openInventory(new ShopCategoryGUI<>(categoryName.get(), player, 1, iridiumTeams).getInventory()); + return true; + } + + private Optional getCategoryName(String name, IridiumTeams iridiumTeams) { + for (String category : iridiumTeams.getShop().categories.keySet()) { + if (category.equalsIgnoreCase(name)) { + return Optional.of(category); + } + } + return Optional.empty(); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/TopCommand.java b/src/main/java/com/iridium/iridiumteams/commands/TopCommand.java index 1ba78e29..fcbe3070 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/TopCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/TopCommand.java @@ -12,14 +12,15 @@ @NoArgsConstructor public class TopCommand> extends Command { - public TopCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public TopCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(U user, String[] arguments, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); - player.openInventory(new TopGUI<>(iridiumTeams.getTop().valueTeamSort, player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); + player.openInventory(new TopGUI<>(iridiumTeams.getTop().valueTeamSort, player, iridiumTeams).getInventory()); + return true; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/TransferCommand.java b/src/main/java/com/iridium/iridiumteams/commands/TransferCommand.java index a235b8de..fa5954d5 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/TransferCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/TransferCommand.java @@ -16,42 +16,42 @@ @NoArgsConstructor public class TransferCommand> extends Command { - public TransferCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public TransferCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } if (user.getUserRank() != Rank.OWNER.getId() && !user.isBypassing()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().mustBeOwnerToTransfer .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } Player targetPlayer = Bukkit.getServer().getPlayer(args[0]); if (targetPlayer == null) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notAPlayer .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } U targetUser = iridiumTeams.getUserManager().getUser(targetPlayer); if (targetUser.getTeamID() != team.getId()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().userNotInYourTeam .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } if (targetPlayer.getUniqueId().equals(player.getUniqueId()) && !user.isBypassing()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotTransferToYourself .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; } player.openInventory(new ConfirmationGUI<>(() -> { @@ -69,7 +69,9 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea )); } }); + getCooldownProvider().applyCooldown(player); }, iridiumTeams).getInventory()); + return false; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/TrustCommand.java b/src/main/java/com/iridium/iridiumteams/commands/TrustCommand.java new file mode 100755 index 00000000..edb2a0f2 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/TrustCommand.java @@ -0,0 +1,74 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class TrustCommand> extends Command { + public TrustCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length != 1) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.TRUST)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotTrust + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + Player invitee = Bukkit.getServer().getPlayer(args[0]); + if (invitee == null) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notAPlayer + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + U offlinePlayerUser = iridiumTeams.getUserManager().getUser(invitee); + if (offlinePlayerUser.getTeamID() == team.getId()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().userAlreadyInTeam + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + if (iridiumTeams.getTeamManager().getTeamTrust(team, offlinePlayerUser).isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().trustAlreadyPresent + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + iridiumTeams.getTeamManager().createTeamTrust(team, offlinePlayerUser, user); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamTrustSent + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", offlinePlayerUser.getName()) + )); + invitee.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamTrustReceived + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", player.getName()) + )); + + return true; + } + + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/TrustsCommand.java b/src/main/java/com/iridium/iridiumteams/commands/TrustsCommand.java new file mode 100755 index 00000000..9937f83a --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/TrustsCommand.java @@ -0,0 +1,25 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.gui.TrustsGUI; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.List; + +@NoArgsConstructor +public class TrustsCommand> extends Command { + public TrustsCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + player.openInventory(new TrustsGUI<>(team, player, iridiumTeams).getInventory()); + return true; + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/UnInviteCommand.java b/src/main/java/com/iridium/iridiumteams/commands/UnInviteCommand.java index 94b4e14c..024524fd 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/UnInviteCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/UnInviteCommand.java @@ -16,22 +16,22 @@ @NoArgsConstructor public class UnInviteCommand> extends Command { - public UnInviteCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public UnInviteCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 1) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } U offlinePlayer = iridiumTeams.getUserManager().getUser(Bukkit.getServer().getOfflinePlayer(args[0])); Optional teamInvite = iridiumTeams.getTeamManager().getTeamInvite(team, offlinePlayer); if (!teamInvite.isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noActiveInvite.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } iridiumTeams.getTeamManager().deleteTeamInvite(teamInvite.get()); @@ -39,6 +39,8 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%player%", offlinePlayer.getName()) )); + + return true; } @Override diff --git a/src/main/java/com/iridium/iridiumteams/commands/UnTrustCommand.java b/src/main/java/com/iridium/iridiumteams/commands/UnTrustCommand.java new file mode 100755 index 00000000..13f2f7c3 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/UnTrustCommand.java @@ -0,0 +1,51 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamTrust; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class UnTrustCommand> extends Command { + public UnTrustCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length != 1) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + U offlinePlayer = iridiumTeams.getUserManager().getUser(Bukkit.getServer().getOfflinePlayer(args[0])); + Optional teamTrust = iridiumTeams.getTeamManager().getTeamTrust(team, offlinePlayer); + if (!teamTrust.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noActiveTrust.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + iridiumTeams.getTeamManager().deleteTeamTrust(teamTrust.get()); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamTrustRevoked + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%player%", offlinePlayer.getName()) + )); + + return true; + } + + @Override + public List onTabComplete(CommandSender commandSender, String[] args, IridiumTeams iridiumTeams) { + return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/UpgradesCommand.java b/src/main/java/com/iridium/iridiumteams/commands/UpgradesCommand.java index a30b5c02..ace021f5 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/UpgradesCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/UpgradesCommand.java @@ -4,6 +4,7 @@ import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamEnhancement; import com.iridium.iridiumteams.enhancements.Enhancement; import com.iridium.iridiumteams.enhancements.EnhancementType; import com.iridium.iridiumteams.gui.UpgradesGUI; @@ -14,20 +15,20 @@ @NoArgsConstructor public class UpgradesCommand> extends Command { - public UpgradesCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public UpgradesCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length == 0) { - player.openInventory(new UpgradesGUI<>(team, player.getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); - return; + player.openInventory(new UpgradesGUI<>(team, player, iridiumTeams).getInventory()); + return true; } if (args.length != 2 || !args[0].equalsIgnoreCase("buy")) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } String booster = args[1]; Enhancement enhancement = iridiumTeams.getEnhancementList().get(booster); @@ -35,7 +36,14 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noSuchUpgrade .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); - return; + return false; + } + TeamEnhancement teamEnhancement = iridiumTeams.getTeamManager().getTeamEnhancement(team, booster); + if(enhancement.levels.get(teamEnhancement.getLevel() + 1) == null){ + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().maxUpgradeLevelReached + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; } boolean success = iridiumTeams.getTeamManager().UpdateEnhancement(team, booster, player); if (success) { @@ -44,5 +52,6 @@ public void execute(U user, T team, String[] args, IridiumTeams iridiumTea .replace("%upgrade%", booster) )); } + return success; } } diff --git a/src/main/java/com/iridium/iridiumteams/commands/ValueCommand.java b/src/main/java/com/iridium/iridiumteams/commands/ValueCommand.java deleted file mode 100755 index 9cb01e13..00000000 --- a/src/main/java/com/iridium/iridiumteams/commands/ValueCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.iridium.iridiumteams.commands; - -import com.iridium.iridiumcore.utils.StringUtils; -import com.iridium.iridiumteams.IridiumTeams; -import com.iridium.iridiumteams.database.IridiumUser; -import com.iridium.iridiumteams.database.Team; -import lombok.NoArgsConstructor; -import org.bukkit.entity.Player; - -import java.util.List; - -@NoArgsConstructor -public class ValueCommand> extends Command { - - public ValueCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); - } - - @Override - public void execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { - Player player = user.getPlayer(); - player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamValue - .replace("%prefix%", iridiumTeams.getConfiguration().prefix) - .replace("%value%", String.valueOf(iridiumTeams.getTeamManager().getTeamValue(team))) - )); - } - -} diff --git a/src/main/java/com/iridium/iridiumteams/commands/WarpCommand.java b/src/main/java/com/iridium/iridiumteams/commands/WarpCommand.java new file mode 100755 index 00000000..d0bef31c --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/WarpCommand.java @@ -0,0 +1,59 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamWarp; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class WarpCommand> extends Command { + public WarpCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + if (args.length != 1 && args.length != 2) { + player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + Optional teamWarp = iridiumTeams.getTeamManager().getTeamWarp(team, args[0]); + if (!teamWarp.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().unknownWarp + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + if (teamWarp.get().getPassword() != null) { + if (args.length != 2 || !teamWarp.get().getPassword().equals(args[1])) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().incorrectPassword + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + } + + if (iridiumTeams.getTeamManager().teleport(player, teamWarp.get().getLocation(), team)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teleportingWarp + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%name%", teamWarp.get().getName()) + )); + } + + return true; + } + + @Override + public List onTabComplete(U user, T team, String[] args, IridiumTeams iridiumTeams) { + List teamWarps = iridiumTeams.getTeamManager().getTeamWarps(team); + return teamWarps.stream().map(TeamWarp::getName).collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/WarpsCommand.java b/src/main/java/com/iridium/iridiumteams/commands/WarpsCommand.java new file mode 100755 index 00000000..da03d34c --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/commands/WarpsCommand.java @@ -0,0 +1,25 @@ +package com.iridium.iridiumteams.commands; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.gui.WarpsGUI; +import lombok.NoArgsConstructor; +import org.bukkit.entity.Player; + +import java.util.List; + +@NoArgsConstructor +public class WarpsCommand> extends Command { + public WarpsCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); + } + + @Override + public boolean execute(U user, T team, String[] arguments, IridiumTeams iridiumTeams) { + Player player = user.getPlayer(); + player.openInventory(new WarpsGUI<>(team, player, iridiumTeams).getInventory()); + return true; + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/commands/WithdrawCommand.java b/src/main/java/com/iridium/iridiumteams/commands/WithdrawCommand.java index ec6d2c36..d7fc14eb 100755 --- a/src/main/java/com/iridium/iridiumteams/commands/WithdrawCommand.java +++ b/src/main/java/com/iridium/iridiumteams/commands/WithdrawCommand.java @@ -18,35 +18,36 @@ @NoArgsConstructor public class WithdrawCommand> extends Command { - public WithdrawCommand(List args, String description, String syntax, String permission) { - super(args, description, syntax, permission); + public WithdrawCommand(List args, String description, String syntax, String permission, long cooldownInSeconds) { + super(args, description, syntax, permission, cooldownInSeconds); } @Override - public void execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { + public boolean execute(U user, T team, String[] args, IridiumTeams iridiumTeams) { Player player = user.getPlayer(); if (args.length != 2) { player.sendMessage(StringUtils.color(syntax.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } Optional bankItem = iridiumTeams.getBankItemList().stream().filter(item -> item.getName().equalsIgnoreCase(args[0])).findFirst(); if (!bankItem.isPresent()) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noSuchBankItem.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); - return; + return false; } try { TeamBank teamBank = iridiumTeams.getTeamManager().getTeamBank(team, bankItem.get().getName()); BankResponse bankResponse = bankItem.get().withdraw(player, Double.parseDouble(args[1]), teamBank, iridiumTeams); - if (bankResponse.isSuccess()) teamBank.setNumber(teamBank.getNumber() - bankResponse.getAmount()); player.sendMessage(StringUtils.color((bankResponse.isSuccess() ? iridiumTeams.getMessages().bankWithdrew : iridiumTeams.getMessages().insufficientFundsToWithdraw) .replace("%prefix%", iridiumTeams.getConfiguration().prefix) .replace("%amount%", String.valueOf(bankResponse.getAmount())) .replace("%type%", bankItem.get().getName()) )); + return true; } catch (NumberFormatException exception) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notANumber.replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; } } diff --git a/src/main/java/com/iridium/iridiumteams/configs/BankItems.java b/src/main/java/com/iridium/iridiumteams/configs/BankItems.java index 54876c30..a523a5b4 100755 --- a/src/main/java/com/iridium/iridiumteams/configs/BankItems.java +++ b/src/main/java/com/iridium/iridiumteams/configs/BankItems.java @@ -1,7 +1,7 @@ package com.iridium.iridiumteams.configs; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; import com.iridium.iridiumteams.bank.ExperienceBankItem; import com.iridium.iridiumteams.bank.MoneyBankItem; diff --git a/src/main/java/com/iridium/iridiumteams/configs/BlockValues.java b/src/main/java/com/iridium/iridiumteams/configs/BlockValues.java index 92794aa9..4cedfedf 100644 --- a/src/main/java/com/iridium/iridiumteams/configs/BlockValues.java +++ b/src/main/java/com/iridium/iridiumteams/configs/BlockValues.java @@ -1,8 +1,8 @@ package com.iridium.iridiumteams.configs; +import com.cryptomorin.xseries.XMaterial; import com.google.common.collect.ImmutableMap; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import org.bukkit.entity.EntityType; @@ -34,4 +34,7 @@ public static class ValuableBlock { public int slot; } + public String valueLore = "&9Value: &7%block_value%"; + public String teamValueLore = "&9Team Value: &7%total_block_value% (%total_blocks%)"; + } \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/configs/Commands.java b/src/main/java/com/iridium/iridiumteams/configs/Commands.java index a38b9abb..0328ee41 100755 --- a/src/main/java/com/iridium/iridiumteams/configs/Commands.java +++ b/src/main/java/com/iridium/iridiumteams/configs/Commands.java @@ -13,6 +13,7 @@ public class Commands> { public MembersCommand membersCommand; public PermissionsCommand permissionsCommand; public SetPermissionCommand setPermissionCommand; + public SettingsCommand settingsCommand; public PromoteCommand promoteCommand; public DemoteCommand demoteCommand; public HelpCommand helpCommand; @@ -20,6 +21,9 @@ public class Commands> { public InviteCommand inviteCommand; public UnInviteCommand unInviteCommand; public InvitesCommand invitesCommand; + public TrustCommand trustCommand; + public UnTrustCommand unTrustCommand; + public TrustsCommand trustsCommand; public KickCommand kickCommand; public LeaveCommand leaveCommand; public DeleteCommand deleteCommand; @@ -38,47 +42,71 @@ public class Commands> { public BoostersCommand boostersCommand; public UpgradesCommand upgradesCommand; public FlyCommand flyCommand; - public ValueCommand valueCommand; public TopCommand topCommand; public RecalculateCommand recalculateCommand; + public WarpsCommand warpsCommand; + public WarpCommand warpCommand; + public SetWarpCommand setWarpCommand; + public DeleteWarpCommand deleteWarpCommand; + public EditWarpCommand editWarpCommand; + public MissionsCommand missionsCommand; + public RewardsCommand rewardsCommand; + public ExperienceCommand experienceCommand; + public ShopCommand shopCommand; + public BlockValueCommand blockValueCommand; + public LevelCommand levelCommand; public Commands() { this("iridiumteams", "Teams", "team"); } public Commands(String permissionBase, String team, String commandBase) { - aboutCommand = new AboutCommand<>(Collections.singletonList("about"), "View information about the plugin", "%prefix% &7/" + commandBase + " about", ""); - createCommand = new CreateCommand<>(Collections.singletonList("create"), "Create a new" + team, "%prefix% &7/" + commandBase + " create ", ""); - membersCommand = new MembersCommand<>(Collections.singletonList("members"), "View your " + team + " members", "%prefix% &7/" + commandBase + " members", ""); - permissionsCommand = new PermissionsCommand<>(Collections.singletonList("permissions"), "Edit your " + team + " permissions", "%prefix% &7/" + commandBase + " permissions", ""); - setPermissionCommand = new SetPermissionCommand<>(Collections.singletonList("setpermission"), "Set your " + team + " permissions", "%prefix% &7/" + commandBase + " setpermission (true/false)", ""); - promoteCommand = new PromoteCommand<>(Collections.singletonList("promote"), "Promote a member of your " + team, "%prefix% &7/" + commandBase + " promote ", ""); - demoteCommand = new DemoteCommand<>(Collections.singletonList("demote"), "Demote a member of your " + team, "%prefix% &7/" + commandBase + " demote ", ""); - helpCommand = new HelpCommand<>(Collections.singletonList("help"), "Show all the plugin commands", "%prefix% &7/" + commandBase + " help", ""); - reloadCommand = new ReloadCommand<>(Collections.singletonList("reload"), "Reload the plugin's configurations", "%prefix% &7/" + commandBase + " reload", permissionBase + ".reload"); - inviteCommand = new InviteCommand<>(Collections.singletonList("invite"), "Invite a player to your " + team, "%prefix% &7/" + commandBase + " invite ", ""); - unInviteCommand = new UnInviteCommand<>(Collections.singletonList("uninvite"), "Revoke a player's invitation to your " + team, "%prefix% &7/" + commandBase + " uninvite ", ""); - invitesCommand = new InvitesCommand<>(Collections.singletonList("invites"), "View all active invites to your " + team, "%prefix% &7/" + commandBase + " invites", ""); - kickCommand = new KickCommand<>(Collections.singletonList("kick"), "Kick a player from your " + team, "%prefix% &7/" + commandBase + " kick ", ""); - leaveCommand = new LeaveCommand<>(Collections.singletonList("leave"), "Leave your current " + team, "%prefix% &7/" + commandBase + " leave", ""); - deleteCommand = new DeleteCommand<>(Collections.singletonList("delete"), "Delete your " + team, "%prefix% &7/" + commandBase + " delete", ""); - infoCommand = new InfoCommand<>(Collections.singletonList("info"), "View information about a " + team, "%prefix% &7/" + commandBase + " info <" + team.toLowerCase() + ">", ""); - descriptionCommand = new DescriptionCommand<>(Collections.singletonList("description"), "Edit your " + team + " description.", "%prefix% &7/" + commandBase + " description", ""); - renameCommand = new RenameCommand<>(Collections.singletonList("rename"), "Rename your " + team, "%prefix% &7/" + commandBase + " rename ", ""); - setHomeCommand = new SetHomeCommand<>(Collections.singletonList("sethome"), "Set your " + team + "'s home", "%prefix% &7/" + commandBase + " sethome", ""); - homeCommand = new HomeCommand<>(Collections.singletonList("home"), "Teleport to your " + team + "'s home", "%prefix% &7/" + commandBase + " home", ""); - bypassCommand = new BypassCommand<>(Collections.singletonList("bypass"), "Bypass " + team + " restrictions", "%prefix% &7/" + commandBase + " bypass", permissionBase + ".bypass"); - transferCommand = new TransferCommand<>(Collections.singletonList("transfer"), "Transfer " + team + " ownership to another player", "%prefix% &7/" + commandBase + " transfer ", ""); - joinCommand = new JoinCommand<>(Collections.singletonList("join"), "Join a " + team, "%prefix% &7/" + commandBase + " join", ""); - bankCommand = new BankCommand<>(Collections.singletonList("bank"), "View your " + team + " bank", "%prefix% &7/" + commandBase + " bank", ""); - depositCommand = new DepositCommand<>(Collections.singletonList("deposit"), "Deposit into your " + team + " bank", "%prefix% &7/" + commandBase + " deposit ", ""); - withdrawCommand = new WithdrawCommand<>(Collections.singletonList("withdraw"), "Withdraw from you " + team + " bank", "%prefix% &7/" + commandBase + " withdraw ", ""); - chatCommand = new ChatCommand<>(Arrays.asList("chat", "c"), "Change your " + team + " chat type", "%prefix% &7/" + commandBase + " chat ", ""); - boostersCommand = new BoostersCommand<>(Collections.singletonList("boosters"), "View your " + team + " Boosters", "%prefix% &7/" + commandBase + " boosters buy ", ""); - upgradesCommand = new UpgradesCommand<>(Collections.singletonList("upgrades"), "View your " + team + " Upgrades", "%prefix% &7/" + commandBase + " upgrades buy ", ""); - flyCommand = new FlyCommand<>(Collections.singletonList("fly"), "Toggle your ability to fly", "%prefix% &7/ " + commandBase + " fly", ""); - valueCommand = new ValueCommand<>(Collections.singletonList("value"), "View your " + team + " Value", "%prefix% &7/" + commandBase + " value", ""); - topCommand = new TopCommand<>(Collections.singletonList("top"), "View the top " + team + "'s", "%prefix% &7/" + commandBase + " top", ""); - recalculateCommand = new RecalculateCommand<>(Collections.singletonList("recalculate"), "Recalculate all "+team+"'s value ", "%prefix% &7/" + commandBase + " recalculate", permissionBase + ".recalculate"); + aboutCommand = new AboutCommand<>(Collections.singletonList("about"), "View information about the plugin", "%prefix% &7/" + commandBase + " about", "", 0); + createCommand = new CreateCommand<>(Collections.singletonList("create"), "Create a new" + team, "%prefix% &7/" + commandBase + " create ", "", 300); + membersCommand = new MembersCommand<>(Collections.singletonList("members"), "View your " + team + " members", "%prefix% &7/" + commandBase + " members", "", 0); + permissionsCommand = new PermissionsCommand<>(Collections.singletonList("permissions"), "Edit your " + team + " permissions", "%prefix% &7/" + commandBase + " permissions", "", 0); + setPermissionCommand = new SetPermissionCommand<>(Collections.singletonList("setpermission"), "Set your " + team + " permissions", "%prefix% &7/" + commandBase + " setpermission (true/false)", "", 0); + settingsCommand = new SettingsCommand<>(Collections.singletonList("settings"), "Set your " + team + " settings", "%prefix% &7/" + commandBase + " settings ", "", 0); + promoteCommand = new PromoteCommand<>(Collections.singletonList("promote"), "Promote a member of your " + team, "%prefix% &7/" + commandBase + " promote ", "", 0); + demoteCommand = new DemoteCommand<>(Collections.singletonList("demote"), "Demote a member of your " + team, "%prefix% &7/" + commandBase + " demote ", "", 0); + helpCommand = new HelpCommand<>(Collections.singletonList("help"), "Show all the plugin commands", "%prefix% &7/" + commandBase + " help", "", 0); + reloadCommand = new ReloadCommand<>(Collections.singletonList("reload"), "Reload the plugin's configurations", "%prefix% &7/" + commandBase + " reload", permissionBase + ".reload", 0); + inviteCommand = new InviteCommand<>(Collections.singletonList("invite"), "Invite a player to your " + team, "%prefix% &7/" + commandBase + " invite ", "", 0); + unInviteCommand = new UnInviteCommand<>(Collections.singletonList("uninvite"), "Revoke a player's invitation to your " + team, "%prefix% &7/" + commandBase + " uninvite ", "", 0); + invitesCommand = new InvitesCommand<>(Collections.singletonList("invites"), "View all active invites to your " + team, "%prefix% &7/" + commandBase + " invites", "", 0); + trustCommand = new TrustCommand<>(Collections.singletonList("trust"), "Trust a player in your " + team, "%prefix% &7/" + commandBase + " trust ", "", 0); + unTrustCommand = new UnTrustCommand<>(Collections.singletonList("untrust"), "Revoke a player's trust in your " + team, "%prefix% &7/" + commandBase + " untrust ", "", 0); + trustsCommand = new TrustsCommand<>(Collections.singletonList("trusts"), "View all active trusted members for your " + team, "%prefix% &7/" + commandBase + " trusts", "", 0); + kickCommand = new KickCommand<>(Collections.singletonList("kick"), "Kick a player from your " + team, "%prefix% &7/" + commandBase + " kick ", "", 0); + leaveCommand = new LeaveCommand<>(Collections.singletonList("leave"), "Leave your current " + team, "%prefix% &7/" + commandBase + " leave", "", 0); + deleteCommand = new DeleteCommand<>(Collections.singletonList("delete"), "Delete your " + team, "%prefix% &7/" + commandBase + " delete (player)", "", 0, permissionBase + ".delete.others", true); + infoCommand = new InfoCommand<>(Arrays.asList("info", "value"), "View information about a " + team, "%prefix% &7/" + commandBase + " info <" + team.toLowerCase() + ">", "", 0); + descriptionCommand = new DescriptionCommand<>(Collections.singletonList("description"), "Set your " + team + " description.", "%prefix% &7/" + commandBase + " description (" + team + ") ", "", 0, permissionBase + ".description.others"); + renameCommand = new RenameCommand<>(Collections.singletonList("rename"), "Rename your " + team, "%prefix% &7/" + commandBase + " rename (" + team + ") ", "", 0, permissionBase + ".rename.others"); + setHomeCommand = new SetHomeCommand<>(Collections.singletonList("sethome"), "Set your " + team + "'s home", "%prefix% &7/" + commandBase + " sethome", "", 0); + homeCommand = new HomeCommand<>(Collections.singletonList("home"), "Teleport to your " + team + "'s home", "%prefix% &7/" + commandBase + " home", "", 0); + bypassCommand = new BypassCommand<>(Collections.singletonList("bypass"), "Bypass " + team + " restrictions", "%prefix% &7/" + commandBase + " bypass", permissionBase + ".bypass", 0); + transferCommand = new TransferCommand<>(Collections.singletonList("transfer"), "Transfer " + team + " ownership to another player", "%prefix% &7/" + commandBase + " transfer ", "", 0); + joinCommand = new JoinCommand<>(Collections.singletonList("join"), "Join a " + team, "%prefix% &7/" + commandBase + " join ", "", 0); + bankCommand = new BankCommand<>(Collections.singletonList("bank"), "View your " + team + " bank", "%prefix% &7/" + commandBase + " bank ", "", 0, permissionBase + ".bank.modify"); + depositCommand = new DepositCommand<>(Collections.singletonList("deposit"), "Deposit into your " + team + " bank", "%prefix% &7/" + commandBase + " deposit ", "", 0); + withdrawCommand = new WithdrawCommand<>(Collections.singletonList("withdraw"), "Withdraw from your " + team + " bank", "%prefix% &7/" + commandBase + " withdraw ", "", 0); + chatCommand = new ChatCommand<>(Arrays.asList("chat", "c"), "Change your " + team + " chat type", "%prefix% &7/" + commandBase + " chat ", "", 0); + boostersCommand = new BoostersCommand<>(Collections.singletonList("boosters"), "View your " + team + " Boosters", "%prefix% &7/" + commandBase + " boosters buy ", "", 0); + upgradesCommand = new UpgradesCommand<>(Collections.singletonList("upgrades"), "View your " + team + " Upgrades", "%prefix% &7/" + commandBase + " upgrades buy ", "", 0); + flyCommand = new FlyCommand<>(Collections.singletonList("fly"), "Toggle your ability to fly", "%prefix% &7/ " + commandBase + " fly", permissionBase + ".fly", permissionBase + ".fly.anywhere", 0); + topCommand = new TopCommand<>(Collections.singletonList("top"), "View the top " + team + "'s", "%prefix% &7/" + commandBase + " top", "", 0); + recalculateCommand = new RecalculateCommand<>(Collections.singletonList("recalculate"), "Recalculate all " + team + "'s value ", "%prefix% &7/" + commandBase + " recalculate", permissionBase + ".recalculate", 0); + warpsCommand = new WarpsCommand<>(Collections.singletonList("warps"), "View your " + team + "'s warps", "%prefix% &7/" + commandBase + " warps", "", 0); + warpCommand = new WarpCommand<>(Collections.singletonList("warp"), "Teleport to your " + team + "'s warps", "%prefix% &7/" + commandBase + " warp (password)", "", 0); + setWarpCommand = new SetWarpCommand<>(Collections.singletonList("setwarp"), "Create a " + team + " warp", "%prefix% &7/" + commandBase + " setwarp", "", 0); + deleteWarpCommand = new DeleteWarpCommand<>(Arrays.asList("deletewarp", "delwarp"), "Delete a " + team + " warp", "%prefix% &7/" + commandBase + " deletewarp", "", 0); + editWarpCommand = new EditWarpCommand<>(Collections.singletonList("editwarp"), "Edit a " + team + " warp", "%prefix% &7/" + commandBase + " editwarp ", "", 0); + missionsCommand = new MissionsCommand<>(Collections.singletonList("missions"), "View your " + team + " missions", "%prefix% &7/" + commandBase + " missions", "", 0); + rewardsCommand = new RewardsCommand<>(Collections.singletonList("rewards"), "View your " + team + " rewards", "%prefix% &7/" + commandBase + " rewards", "", 0); + experienceCommand = new ExperienceCommand<>(Collections.singletonList("experience"), "View your " + team + " experience", "%prefix% &7/" + commandBase + " experience ", "", 0, permissionBase + ".experience.modify"); + shopCommand = new ShopCommand<>(Collections.singletonList("shop"), "Open the Shop", "%prefix% &7/" + commandBase + " shop", "", 0); + blockValueCommand = new BlockValueCommand<>(Collections.singletonList("blockvalues"), "View block values","%prefix% &7/" + commandBase + "blockvalues (player)", "", 0); + levelCommand = new LevelCommand<>(Collections.singletonList("level"), "Check your " + team + " level", "%prefix% &7/" + commandBase + " level", "", 0); } } diff --git a/src/main/java/com/iridium/iridiumteams/configs/Configuration.java b/src/main/java/com/iridium/iridiumteams/configs/Configuration.java index b777ad8b..b401e121 100755 --- a/src/main/java/com/iridium/iridiumteams/configs/Configuration.java +++ b/src/main/java/com/iridium/iridiumteams/configs/Configuration.java @@ -1,46 +1,78 @@ package com.iridium.iridiumteams.configs; +import com.cryptomorin.xseries.XMaterial; +import com.cryptomorin.xseries.XSound; import com.google.common.collect.ImmutableMap; import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; import com.iridium.iridiumcore.utils.NumberFormatter; +import com.iridium.iridiumteams.Reward; import com.iridium.iridiumteams.UserRank; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; public class Configuration { public String prefix; + public boolean updateChecks; + public String dateTimeFormat; public NumberFormatter numberFormatter; + public boolean createRequiresName; + public boolean preventTntGriefing; + public boolean patreonMessage; public int minTeamNameLength; public int maxTeamNameLength; public int recalculateInterval; public int forceRecalculateInterval; + public boolean enableLeveling; + public boolean giveLevelRewards; + public int flatExpRequirement; + public double curvedExpModifier; public Map userRanks; public UserRank visitor; public UserRank owner; public String teamInfoTitle; public String teamInfoTitleFiller; public List teamInfo; + public List levelInfo; public List noneChatAlias; public List teamChatAlias; public Map teamTopSlots; + public Map teamWarpSlots; + + + /** + * The Rewards the island gets for leveling up + * The integer represents the reward they will get, if the island level is divisible by this number they will get that reward + * Higest number takes priority + *

+ * e.g. 1 will give the reward to every level since every number is divisible by 1 + * 5 will give the reward to levels 5 10 15 20 25 ect since they are divisible by 5 + */ + public Map levelRewards; + public List whitelistedWorlds; + public Configuration() { this("&c", "Team", "IridiumTeams"); } public Configuration(String color, String team, String pluginName) { this.prefix = color + "&l" + pluginName + " &8»"; + this.updateChecks = true; + this.dateTimeFormat = "EEEE, MMMM dd HH:mm:ss"; this.numberFormatter = new NumberFormatter(); + this.createRequiresName = true; + this.preventTntGriefing = true; + this.patreonMessage = true; this.minTeamNameLength = 3; this.maxTeamNameLength = 20; this.recalculateInterval = 5; this.forceRecalculateInterval = 1; + this.enableLeveling = true; + this.giveLevelRewards = true; + this.flatExpRequirement = 10; + this.curvedExpModifier = 0.95; this.userRanks = new ImmutableMap.Builder() .put(1, new UserRank("Member", new Item(XMaterial.STONE_AXE, 12, 1, "&9&lMember", Collections.emptyList()))) .put(2, new UserRank("Moderator", new Item(XMaterial.IRON_AXE, 13, 1, "&5&lModerator", Collections.emptyList()))) @@ -52,11 +84,15 @@ public Configuration(String color, String team, String pluginName) { this.teamInfoTitleFiller = "&8&m "; this.teamInfo = Arrays.asList( color + "Description: &7%" + team.toLowerCase() + "_description%", - color + "Level: &7%" + team.toLowerCase() + "_level% (#%" + team.toLowerCase() + "_level_rank%)", + color + "Level: &7%" + team.toLowerCase() + "_level% (#%" + team.toLowerCase() + "_experience_rank%)", color + "Value: &7%" + team.toLowerCase() + "_value% (#%" + team.toLowerCase() + "_value_rank%)", color + "Online Members (%" + team.toLowerCase() + "_members_online_count%/%" + team.toLowerCase() + "_members_count%): &7%" + team.toLowerCase() + "_members_online%", color + "Offline Members (%" + team.toLowerCase() + "_members_offline_count%/%" + team.toLowerCase() + "_members_count%): &7%" + team.toLowerCase() + "_members_offline%" ); + this.levelInfo = Arrays.asList( + color + "Level: &7%" + team.toLowerCase() + "_level%", + color + "Experience: &7%" + team.toLowerCase() + "_experience% / %" + team.toLowerCase() + "_experienceForNextLevel% (need %" + team.toLowerCase() + "_experienceToLevelUp% more)" + ); this.noneChatAlias = Arrays.asList("n", "none"); this.teamChatAlias = Arrays.asList(team.toLowerCase().substring(0, 1), team.toLowerCase()); @@ -71,6 +107,30 @@ public Configuration(String color, String team, String pluginName) { .put(8, 33) .put(9, 34) .build(); + this.teamWarpSlots = ImmutableMap.builder() + .put(1, 9) + .put(2, 11) + .put(3, 13) + .put(4, 15) + .put(5, 17) + .build(); + + this.levelRewards = ImmutableMap.builder() + .put(1, new Reward(new Item(XMaterial.EXPERIENCE_BOTTLE, 1, "&b&lLevel %"+team.toLowerCase()+"_level% Reward", Arrays.asList( + "&7"+team+" Level %"+team.toLowerCase()+"_level% Rewards:", + "&b&l* &b200 Money", + "", + "&b&l[!] &bLeft click to redeem" + )), Collections.emptyList(), 0, new HashMap<>(), 200, 0, XSound.ENTITY_PLAYER_LEVELUP)) + + .put(5, new Reward(new Item(XMaterial.EXPERIENCE_BOTTLE, 1, "&b&lLevel %"+team.toLowerCase()+"_level% Reward", Arrays.asList( + "&7"+team+" Level %"+team.toLowerCase()+"_level% Rewards:", + "&b&l* &b2000 Money", + "", + "&b&l[!] &bLeft click to redeem" + )), Collections.emptyList(), 0, new HashMap<>(), 2000, 0, XSound.ENTITY_PLAYER_LEVELUP)) + .build(); + this.whitelistedWorlds = Collections.emptyList(); } } diff --git a/src/main/java/com/iridium/iridiumteams/configs/Enhancements.java b/src/main/java/com/iridium/iridiumteams/configs/Enhancements.java index e119ef35..b0d84f72 100755 --- a/src/main/java/com/iridium/iridiumteams/configs/Enhancements.java +++ b/src/main/java/com/iridium/iridiumteams/configs/Enhancements.java @@ -1,9 +1,9 @@ package com.iridium.iridiumteams.configs; +import com.cryptomorin.xseries.XMaterial; +import com.cryptomorin.xseries.XPotion; import com.google.common.collect.ImmutableMap; import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; -import com.iridium.iridiumcore.dependencies.xseries.XPotion; import com.iridium.iridiumteams.enhancements.*; import java.util.Arrays; @@ -13,125 +13,180 @@ public class Enhancements { - public Enhancement farmingEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.WHEAT, 10, 1, "&b&lFarming Booster", Arrays.asList( - "&7Increase the speed at which crops grow.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new FarmingEnhancementData(5, 10000, new HashMap<>(), 1.5)) - .put(2, new FarmingEnhancementData(10, 10000, new HashMap<>(), 2)) - .put(3, new FarmingEnhancementData(15, 10000, new HashMap<>(), 2.5)) - .build()); - public Enhancement spawnerEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.SPAWNER, 12, 1, "&b&lSpawner Booster", Arrays.asList( - "&7Increase your spawner speeds.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new SpawnerEnhancementData(5, 10000, new HashMap<>(), 6)) - .put(2, new SpawnerEnhancementData(10, 10000, new HashMap<>(), 8)) - .put(3, new SpawnerEnhancementData(15, 10000, new HashMap<>(), 10)) - .build()); - public Enhancement experienceEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.EXPERIENCE_BOTTLE, 14, 1, "&b&lExperience Booster", Arrays.asList( - "&7Increase how much experience you get.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new ExperienceEnhancementData(5, 10000, new HashMap<>(), 1.5)) - .put(2, new ExperienceEnhancementData(10, 10000, new HashMap<>(), 2)) - .put(3, new ExperienceEnhancementData(15, 10000, new HashMap<>(), 2.5)) - .build()); - public Enhancement flightEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.FEATHER, 16, 1, "&c&lFlight Booster", Arrays.asList( - "&7Gain access to fly.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new FlightEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.MEMBERS_ANYWHERE))) - .put(2, new FlightEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS))) - .build()); - public Map> potionEnhancements = new ImmutableMap.Builder>() - .put("haste", new Enhancement<>( - true, EnhancementType.UPGRADE, new Item(XMaterial.DIAMOND_PICKAXE, 10, 1, "&c&lHaste Booster", Arrays.asList( - "&7Gain a Haste Potion Effect.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new PotionEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 1, XPotion.FAST_DIGGING)) - .put(2, new PotionEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 2, XPotion.FAST_DIGGING)) - .put(3, new PotionEnhancementData(15, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 3, XPotion.FAST_DIGGING)) - .build() - )) - .put("speed", new Enhancement<>( - true, EnhancementType.UPGRADE, new Item(XMaterial.SUGAR, 12, 1, "&c&lSpeed Booster", Arrays.asList( - "&7Gain a Speed Potion Effect.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new PotionEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 1, XPotion.SPEED)) - .put(2, new PotionEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 2, XPotion.SPEED)) - .put(3, new PotionEnhancementData(15, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 3, XPotion.SPEED)) - .build() - )) - .put("jump", new Enhancement<>( - true, EnhancementType.UPGRADE, new Item(XMaterial.FEATHER, 14, 1, "&c&lJump Booster", Arrays.asList( - "&7Gain a Jump Boost Potion Effect.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new PotionEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 1, XPotion.JUMP)) - .put(2, new PotionEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 2, XPotion.JUMP)) - .put(3, new PotionEnhancementData(15, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 3, XPotion.JUMP)) - .build() - )) - .put("regeneration", new Enhancement<>( - true, EnhancementType.UPGRADE, new Item(XMaterial.GOLDEN_APPLE, 16, 1, "&c&lRegen Booster", Arrays.asList( - "&7Gain a Regeneration Potion Effect.", - "", - "&c&lInformation:", - "&c&l * &7Time Remaining: &c%timeremaining_minutes% minutes and %timeremaining_seconds% seconds", - "&c&l * &7Current Level: %current_level%", - "&c&l * &7Booster Cost: $%cost%", - "", - "&c&l[!] &cLeft Click to Purchase Level %next_level%." - )), new ImmutableMap.Builder() - .put(1, new PotionEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 1, XPotion.REGENERATION)) - .put(2, new PotionEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 2, XPotion.REGENERATION)) - .put(3, new PotionEnhancementData(15, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 3, XPotion.REGENERATION)) - .build() - )) - .build(); + public Enhancement farmingEnhancement; + public Enhancement spawnerEnhancement; + public Enhancement experienceEnhancement; + public Enhancement flightEnhancement; + public Enhancement membersEnhancement; + + public Enhancement warpsEnhancement; + public Map> potionEnhancements; + + public Enhancements() { + this("&c"); + } + + public Enhancements(String color) { + farmingEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.WHEAT, 10, 1, color + "&lFarming Booster", Arrays.asList( + "&7Increase the speed at which crops grow.", + "", + color + "&lInformation:", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours, %timeremaining_minutes% minutes and %timeremaining_seconds% seconds", + color + "&l * &7Current Level: %current_level%", + color + "&l * &7Booster Cost: $%vault_cost%", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(1, new FarmingEnhancementData(5, 10000, new HashMap<>(), 1)) + .put(2, new FarmingEnhancementData(10, 10000, new HashMap<>(), 2)) + .put(3, new FarmingEnhancementData(15, 10000, new HashMap<>(), 3)) + .build()); + + spawnerEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.SPAWNER, 12, 1, color + "&lSpawner Booster", Arrays.asList( + "&7Increase your spawner speeds.", + "", + color + "&lInformation:", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours, %timeremaining_minutes% minutes and %timeremaining_seconds% seconds", + color + "&l * &7Current Level: %current_level%", + color + "&l * &7Booster Cost: $%vault_cost%", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(1, new SpawnerEnhancementData(5, 10000, new HashMap<>(), 6, 0, 800)) + .put(2, new SpawnerEnhancementData(10, 10000, new HashMap<>(), 8, 0, 600)) + .put(3, new SpawnerEnhancementData(15, 10000, new HashMap<>(), 10, 0, 400)) + .build()); + + experienceEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.EXPERIENCE_BOTTLE, 14, 1, color + "&lExperience Booster", Arrays.asList( + "&7Increase how much experience you get.", + "", + color + "&lInformation:", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours, %timeremaining_minutes% minutes and %timeremaining_seconds% seconds", + color + "&l * &7Current Level: %current_level%", + color + "&l * &7Booster Cost: $%vault_cost%", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(1, new ExperienceEnhancementData(5, 10000, new HashMap<>(), 1.5)) + .put(2, new ExperienceEnhancementData(10, 10000, new HashMap<>(), 2)) + .put(3, new ExperienceEnhancementData(15, 10000, new HashMap<>(), 2.5)) + .build()); + + flightEnhancement = new Enhancement<>(true, EnhancementType.BOOSTER, new Item(XMaterial.FEATHER, 16, 1, color + "&lFlight Booster", Arrays.asList( + "&7Gain access to fly.", + "", + color + "&lInformation:", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours, %timeremaining_minutes% minutes and %timeremaining_seconds% seconds", + color + "&l * &7Current Level: %current_level%", + color + "&l * &7Booster Cost: $%vault_cost%", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(1, new FlightEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.MEMBERS_IN_TERRITORY))) + .put(2, new FlightEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.MEMBERS_ANYWHERE))) + .build()); + + membersEnhancement = new Enhancement<>(true, EnhancementType.UPGRADE, new Item(XMaterial.PLAYER_HEAD, 11, "Peaches_MLG", 1, color + "&lMember Upgrade", Arrays.asList( + "&7Need more members? Buy this", + "&7upgrade to increase your member count.", + "", + color + "&lInformation:", + color + "&l * &7Current Level: " + color + "%current_level%", + color + "&l * &7Current Members: " + color + "%members% Members", + color + "&l * &7Upgrade Cost: " + color + "%vault_cost%", + color + "&lLevels:", + color + "&l * &7Level 1: " + color + "5 Members", + color + "&l * &7Level 2: " + color + "10 Members", + color + "&l * &7Level 3: " + color + "15 Members", + color + "&l * &7Level 4: " + color + "20 Members", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(0, new MembersEnhancementData(5, 10000, new HashMap<>(), 5)) + .put(1, new MembersEnhancementData(5, 10000, new HashMap<>(), 10)) + .put(2, new MembersEnhancementData(10, 10000, new HashMap<>(), 15)) + .put(3, new MembersEnhancementData(15, 10000, new HashMap<>(), 20)) + .build()); + + warpsEnhancement = new Enhancement<>(true, EnhancementType.UPGRADE, new Item(XMaterial.END_PORTAL_FRAME, 13, 1, color + "&lWarps Upgrade", Arrays.asList( + "&7Need more members? Buy this", + "&7upgrade to increase your member count.", + "", + color + "&lInformation:", + color + "&l * &7Current Level: " + color + "%current_level%", + color + "&l * &7Current Warps: " + color + "%warps% Warps", + color + "&l * &7Upgrade Cost: " + color + "%vault_cost%", + color + "&lLevels:", + color + "&l * &7Level 1: " + color + "1 Warps", + color + "&l * &7Level 2: " + color + "3 Warps", + color + "&l * &7Level 3: " + color + "5 Warps", + color + "&l * &7Level 4: " + color + "7 Warps", + color + "&l * &7Level 5: " + color + "9 Warps", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(0, new WarpsEnhancementData(5, 10000, new HashMap<>(), 1)) + .put(1, new WarpsEnhancementData(5, 10000, new HashMap<>(), 3)) + .put(2, new WarpsEnhancementData(10, 10000, new HashMap<>(), 5)) + .put(3, new WarpsEnhancementData(15, 10000, new HashMap<>(), 7)) + .put(4, new WarpsEnhancementData(15, 10000, new HashMap<>(), 9)) + .build()); + + potionEnhancements = new ImmutableMap.Builder>() + .put("haste", new Enhancement<>( + true, EnhancementType.UPGRADE, new Item(XMaterial.DIAMOND_PICKAXE, 10, 1, color + "&lHaste Booster", Arrays.asList( + "&7Gain a Haste Potion Effect.", + "", + color + "&lInformation:", + color + "&l * &7Current Level: %current_level%", + color + "&l * &7Upgrade Cost: $%vault_cost%", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(1, new PotionEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 1, XPotion.HASTE)) + .put(2, new PotionEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 2, XPotion.HASTE)) + .put(3, new PotionEnhancementData(15, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 3, XPotion.HASTE)) + .build() + )) + .put("speed", new Enhancement<>( + true, EnhancementType.UPGRADE, new Item(XMaterial.SUGAR, 12, 1, color + "&lSpeed Booster", Arrays.asList( + "&7Gain a Speed Potion Effect.", + "", + color + "&lInformation:", + color + "&l * &7Current Level: %current_level%", + color + "&l * &7Upgrade Cost: $%vault_cost%", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(1, new PotionEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 1, XPotion.SPEED)) + .put(2, new PotionEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 2, XPotion.SPEED)) + .put(3, new PotionEnhancementData(15, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 3, XPotion.SPEED)) + .build() + )) + .put("jump", new Enhancement<>( + true, EnhancementType.UPGRADE, new Item(XMaterial.FEATHER, 14, 1, color + "&lJump Booster", Arrays.asList( + "&7Gain a Jump Boost Potion Effect.", + "", + color + "&lInformation:", + color + "&l * &7Current Level: %current_level%", + color + "&l * &7Upgrade Cost: $%vault_cost%", + "", + color + "[!] &7Must be level %minLevel% to purchase", + color + "&l[!] " + color + "Left Click to Purchase Level %next_level%." + )), new ImmutableMap.Builder() + .put(1, new PotionEnhancementData(5, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 1, XPotion.JUMP_BOOST)) + .put(2, new PotionEnhancementData(10, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 2, XPotion.JUMP_BOOST)) + .put(3, new PotionEnhancementData(15, 10000, new HashMap<>(), Collections.singletonList(EnhancementAffectsType.VISITORS), 3, XPotion.JUMP_BOOST)) + .build() + )) + .build(); + } } diff --git a/src/main/java/com/iridium/iridiumteams/configs/Inventories.java b/src/main/java/com/iridium/iridiumteams/configs/Inventories.java index 613b6396..5a6b3c79 100755 --- a/src/main/java/com/iridium/iridiumteams/configs/Inventories.java +++ b/src/main/java/com/iridium/iridiumteams/configs/Inventories.java @@ -1,17 +1,16 @@ package com.iridium.iridiumteams.configs; +import com.cryptomorin.xseries.XMaterial; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.ImmutableMap; import com.iridium.iridiumcore.Background; import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.fasterxml.annotation.JsonIgnore; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; -import com.iridium.iridiumteams.configs.inventories.ConfirmationInventoryConfig; -import com.iridium.iridiumteams.configs.inventories.NoItemGUI; -import com.iridium.iridiumteams.configs.inventories.SingleItemGUI; -import com.iridium.iridiumteams.configs.inventories.TopGUIConfig; +import com.iridium.iridiumteams.configs.inventories.*; +import com.iridium.iridiumteams.missions.MissionType; import java.util.Arrays; import java.util.Collections; +import java.util.Map; public class Inventories { @JsonIgnore @@ -19,17 +18,30 @@ public class Inventories { @JsonIgnore private final Background background2 = new Background(ImmutableMap.builder().put(9, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(10, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(11, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(12, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(13, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(14, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(15, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(16, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).put(17, new Item(XMaterial.LIGHT_GRAY_STAINED_GLASS_PANE, 1, " ", Collections.emptyList())).build()); public Item backButton; + public SingleItemGUI rewardsGUI; public SingleItemGUI membersGUI; public SingleItemGUI invitesGUI; + public SingleItemGUI trustsGUI; public NoItemGUI ranksGUI; public NoItemGUI permissionsGUI; + public NoItemGUI settingsGUI; public NoItemGUI bankGUI; + public Map missionGUI; public TopGUIConfig topGUI; public NoItemGUI boostersGUI; public NoItemGUI upgradesGUI; + public NoItemGUI shopOverviewGUI; + public NoItemGUI shopCategoryGUI; + + public SingleItemGUI warpsGUI; + + public MissionTypeSelectorInventoryConfig missionTypeSelectorGUI; public ConfirmationInventoryConfig confirmationGUI; public Item nextPage; public Item previousPage; + public NoItemGUI blockValueGUI; + public NoItemGUI spawnerValueGUI; + public BlockValuesTypeSelectorInventoryConfig blockValuesTypeSelectorGUI; public Inventories() { this("Team", "&c"); @@ -37,34 +49,85 @@ public Inventories() { public Inventories(String team, String color) { backButton = new Item(XMaterial.NETHER_STAR, -5, 1, "&c&lBack", Collections.emptyList()); + rewardsGUI = new SingleItemGUI(54, "&7" + team + " Rewards", background1, new Item(XMaterial.SUNFLOWER, 53, 1, color + "&lClaim All!", Collections.emptyList())); + + membersGUI = new SingleItemGUI(0, "&7" + team + " Members", background1, new Item(XMaterial.PLAYER_HEAD, 0, "%player_name%", 1, color + "&l%player_name%", Arrays.asList( + color + "Joined: &7%player_join%", + color + "Rank: &7%player_rank%", + "", + color + "&l[!] &7Right Click to promote", + color + "&l[!] &7Left click to demote/kick" + ))); - membersGUI = new SingleItemGUI(0, "&7" + team + " Members", background1, new Item(XMaterial.PLAYER_HEAD, 0, 1, color + "&l%player_name%", "%player_name%", Arrays.asList("&7Joined: %player_join%", "&7Rank: %player_rank%", "", color + "&l[!] &7Right Click to promote", color + "&l[!] &7Left click to demote/kick"))); + invitesGUI = new SingleItemGUI(0, "&7" + team + " Invites", background1, new Item(XMaterial.PLAYER_HEAD, 0, "%player_name%", 1, color + "&l%player_name%", Arrays.asList( + color + "Invited: &7%invite_time%", + "", + color + "&l[!] &7Left click to uninvite" + ))); - invitesGUI = new SingleItemGUI(0, "&7" + team + " Invites", background1, new Item(XMaterial.PLAYER_HEAD, 0, 1, color + "&l%player_name%", "%player_name%", Arrays.asList("", color + "&l[!] &7Left click to uninvite"))); + trustsGUI = new SingleItemGUI(0, "&7" + team + " Trusts", background1, new Item(XMaterial.PLAYER_HEAD, 0, "%player_name%", 1, color + "&l%player_name%", Arrays.asList( + color + "Trusted At: &7%trusted_time%", + color + "Trusted By: &7%truster%", + "", + color + "&l[!] &7Left click to un-trust" + ))); ranksGUI = new NoItemGUI(27, "&7" + team + " Permissions", background1); permissionsGUI = new NoItemGUI(54, "&7" + team + " Permissions", background1); + settingsGUI = new NoItemGUI(36, "&7" + team + " Settings", background1); bankGUI = new NoItemGUI(27, "&7" + team + " Bank", background2); + missionGUI = new ImmutableMap.Builder() + .put(MissionType.DAILY, new NoItemGUI(27, "&7Daily " + team + " Missions", background2)) + .put(MissionType.WEEKLY, new NoItemGUI(27, "&7Weekly " + team + " Missions", background2)) + .put(MissionType.INFINITE, new NoItemGUI(27, "&7" + team + " Missions", background2)) + .put(MissionType.ONCE, new NoItemGUI(45, "&7" + team + " Missions", background1)) + .build(); boostersGUI = new NoItemGUI(27, "&7" + team + " Boosters", background2); upgradesGUI = new NoItemGUI(27, "&7" + team + " Upgrades", background2); - topGUI = new TopGUIConfig(54, "&7Top " + team, background1, new Item(XMaterial.PLAYER_HEAD, 1, color + "&l" + team + " Owner: &f%" + team.toLowerCase() + "_owner%", "%" + team.toLowerCase() + "_owner%", Arrays.asList( + shopOverviewGUI = new NoItemGUI(36, "&7Island Shop", background1); + shopCategoryGUI = new NoItemGUI(0, "&7Island Shop | %category_name%", background1); + warpsGUI = new SingleItemGUI(27, "&7" + team + " Warps", background2, new Item( + XMaterial.GREEN_STAINED_GLASS_PANE, 1, "&b&l%warp_name%", + Arrays.asList( + color + "Description: &7%warp_description%", + color + "Created By: &7%warp_creator%", + color + "Date: &7%warp_create_time%", + "", + "&b&l[!] &bLeft Click to Teleport", + "&b&l[!] &bRight Click to Delete" + ))); + topGUI = new TopGUIConfig(54, "&7Top " + team, background1, new Item(XMaterial.PLAYER_HEAD, 0, "%" + team.toLowerCase() + "_owner%", 1, color + "&l" + team + " Owner: &f%" + team.toLowerCase() + "_owner%", Arrays.asList( "", - color + "&l * &7" + team + " Name: " + color + "%" + team.toLowerCase() + "_name%", - color + "&l * &7" + team + " Value: " + color + "%" + team.toLowerCase() + "_value% (#%" + team.toLowerCase() + "_value_rank%)", - color + "&l * &7" + team + " Experience: " + color + "%" + team.toLowerCase() + "_experience% (#%" + team.toLowerCase() + "_experience_rank%)", - color + "&l * &7Netherite Blocks: " + color + "%NETHERITE_BLOCK_AMOUNT%", - color + "&l * &7Emerald Blocks: " + color + "%EMERALD_BLOCK_AMOUNT%", - color + "&l * &7Diamond Blocks: " + color + "%DIAMOND_BLOCK_AMOUNT%", - color + "&l * &7Gold Blocks: " + color + "%GOLD_BLOCK_AMOUNT%", - color + "&l * &7Iron Blocks: " + color + "%IRON_BLOCK_AMOUNT%", - color + "&l * &7Hopper Blocks: " + color + "%HOPPER_AMOUNT%", - color + "&l * &7Beacon Blocks: " + color + "%BEACON_AMOUNT%", - "", - color + "&l[!] " + color + "Left Click to Teleport to this Island." + color + team + " Name: &7%" + team.toLowerCase() + "_name%", + color + team + " Value: &7%" + team.toLowerCase() + "_value% (#%" + team.toLowerCase() + "_value_rank%)", + color + team + " Experience: &7%" + team.toLowerCase() + "_experience% (#%" + team.toLowerCase() + "_experience_rank%)", + color + "Netherite Blocks: &7%" + team.toLowerCase() + "_netherite_block_amount%", + color + "Emerald Blocks: &7%" + team.toLowerCase() + "_emerald_block_amount%", + color + "Diamond Blocks: &7%" + team.toLowerCase() + "_diamond_block_amount%", + color + "Gold Blocks: &7%" + team.toLowerCase() + "_gold_block_amount%", + color + "Iron Blocks: &7%" + team.toLowerCase() + "_iron_block_amount%", + color + "Hopper Blocks: &7%" + team.toLowerCase() + "_hopper_amount%", + color + "Beacon Blocks: &7%" + team.toLowerCase() + "_beacon_amount%" )), new Item(XMaterial.BARRIER, 1, " ", Collections.emptyList())); + missionTypeSelectorGUI = new MissionTypeSelectorInventoryConfig(27, "&7" + team + " Missions", background2, + new MissionTypeSelectorInventoryConfig.MissionTypeItem(new Item(XMaterial.IRON_INGOT, 11, 1, color + "&lDaily Missions", Collections.emptyList()), true), + new MissionTypeSelectorInventoryConfig.MissionTypeItem(new Item(XMaterial.GOLD_INGOT, 13, 1, color + "&lWeekly Missions", Collections.emptyList()), true), + new MissionTypeSelectorInventoryConfig.MissionTypeItem(new Item(XMaterial.IRON_INGOT, 11, 1, color + "&lInstant Missions", Collections.emptyList()), false), + new MissionTypeSelectorInventoryConfig.MissionTypeItem(new Item(XMaterial.DIAMOND, 15, 1, color + "&lOne Time Missions", Collections.emptyList()), true) + ); + confirmationGUI = new ConfirmationInventoryConfig(27, "&7Are you sure?", background2, new Item(XMaterial.GREEN_STAINED_GLASS_PANE, 15, 1, "&a&lYes", Collections.emptyList()), new Item(XMaterial.RED_STAINED_GLASS_PANE, 11, 1, color + "&lNo", Collections.emptyList())); nextPage = new Item(XMaterial.LIME_STAINED_GLASS_PANE, 1, "&a&lNext Page", Collections.emptyList()); previousPage = new Item(XMaterial.RED_STAINED_GLASS_PANE, 1, color + "&lPrevious Page", Collections.emptyList()); + + blockValueGUI = new NoItemGUI(54, "&7Block Values - Page %page% of %max_pages%", background1); + + spawnerValueGUI = new NoItemGUI(54, "&7Spawner Values - Page %page% of %max_pages%", background1); + + blockValuesTypeSelectorGUI = new BlockValuesTypeSelectorInventoryConfig(27, "&7" + team + " Block Values", background2, + new BlockValuesTypeSelectorInventoryConfig.BlockTypeItem(new Item(XMaterial.DIAMOND_BLOCK, 11, 1, color + "&lBlocks", Collections.emptyList()), true), + new BlockValuesTypeSelectorInventoryConfig.BlockTypeItem(new Item(XMaterial.SPAWNER, 15, 1, color + "&lSpawners", Collections.emptyList()), true) + ); } } diff --git a/src/main/java/com/iridium/iridiumteams/configs/Messages.java b/src/main/java/com/iridium/iridiumteams/configs/Messages.java index 776f8dd2..0ce54953 100755 --- a/src/main/java/com/iridium/iridiumteams/configs/Messages.java +++ b/src/main/java/com/iridium/iridiumteams/configs/Messages.java @@ -20,22 +20,35 @@ public class Messages { public String teamNameTooLong; public String teamCreated; public String teamDeleted; + public String deletedPlayerTeam; public String dontHaveTeam; public String cannotChangePermissions; public String cannotInvite; + public String cannotTrust; public String cannotKick; public String cannotDeleteTeam; public String cannotChangeDescription; public String cannotChangeName; + public String cannotChangeSettings; public String cannotSetHome; + public String cannotManageWarps; public String invalidUserRank; public String invalidPermission; public String permissionSet; + public String invalidSetting; + public String invalidSettingValue; + public String settingSet; public String userNotInYourTeam; public String cannotPromoteUser; public String cannotDemoteUser; + public String cannotOpenContainers; + public String cannotOpenDoors; + public String cannotTriggerRedstone; + public String cannotBreakSpawners; public String cannotBreakBlocks; public String cannotPlaceBlocks; + public String cannotKillMobs; + public String cannotUseBuckets; public String promotedPlayer; public String userPromotedPlayer; public String demotedPlayer; @@ -44,16 +57,25 @@ public class Messages { public String inviteAlreadyPresent; public String teamInviteSent; public String teamInviteReceived; + public String trustAlreadyPresent; + public String teamTrustSent; + public String teamTrustReceived; + public String teamTrustRevoked; + public String noActiveTrust; public String dontHaveInvite; public String noActiveInvite; public String teamInviteRevoked; public String youHaveBeenKicked; public String playerKicked; public String cannotKickHigherRank; + public String cannotKickYourself; public String leftTeam; + public String ownerCannotLeave; public String userLeftTeam; public String teamDoesntExistByName; + public String changedPlayerDescription; public String descriptionChanged; + public String changedPlayerName; public String nameChanged; public String notInTeamLand; public String homeSet; @@ -69,6 +91,12 @@ public class Messages { public String userJoinedTeam; public String bankWithdrew; public String bankDeposited; + public String gaveBank; + public String setBank; + public String removedBank; + public String gaveExperience; + public String setExperience; + public String removedExperience; public String insufficientFundsToWithdraw; public String insufficientFundsToDeposit; public String noSuchBankItem; @@ -81,15 +109,55 @@ public class Messages { public String flightNotActive; public String noSuchBooster; public String noSuchUpgrade; + public String maxUpgradeLevelReached; public String notHighEnoughLevel; public String notEnoughMoney; public String notEnoughBankItem; public String purchasedUpgrade; public String purchasedBooster; - public String teamValue; public String calculatingTeams; public String calculatingFinished; public String calculationAlreadyInProcess; + public String createdWarp; + public String deletedWarp; + public String warpAlreadyExists; + public String warpLimitReached; + public String memberLimitReached; + public String unknownWarp; + public String incorrectPassword; + public String teleportingWarp; + public String notSafe; + public String warpIconSet; + public String warpDescriptionSet; + public String noSuchMaterial; + public String noShopCategory; + public String inventoryFull; + public String noSuchItem; + public String successfullyBought; + public String successfullySold; + public String cannotAfford; + public String cannotVisit; + public String teamLevelUp; + public String activeCooldown; + public String teamIsPrivate; + public String blockName; + public String spawnerName; + public String nullPlaceholder; + public String enabledPlaceholder; + public String disabledPlaceholder; + public String privatePlaceholder; + public String publicPlaceholder; + public String serverPlaceholder; + public String sunnyPlaceholder; + public String rainingPlaceholder; + public String sunrisePlaceholder; + public String dayPlaceholder; + public String morningPlaceholder; + public String noonPlaceholder; + public String sunsetPlaceholder; + public String nightPlaceholder; + public String midnightPlaceholder; + public String cannotInteract; public Messages() { this("Team", "t", "IridiumTeams", "&c"); @@ -114,41 +182,63 @@ public Messages(String team, String command, String pluginName, String color) { teamNameTooShort = "%prefix% &7This " + team + " name is too short. It must be at least %min_length% characters long."; teamNameTooLong = "%prefix% &7This " + team + " name is too long. It must be at most %max_length% characters long."; teamCreated = "%prefix% &7You have created a " + team + "!"; + deletedPlayerTeam = "%prefix% &7You have deleted The " + team + " %name%!"; teamDeleted = "%prefix% &7%player% has deleted your " + team + "!"; dontHaveTeam = "%prefix% &7You dont have a " + team + "."; cannotChangePermissions = "%prefix% &7You cannot change this permission."; cannotInvite = "%prefix% &7You cannot invite players to the " + team + "."; + cannotTrust = "%prefix% &7You cannot trust players in the " + team + "."; cannotKick = "%prefix% &7You cannot kick players from the " + team + "."; cannotDeleteTeam = "%prefix% &7Only the " + team + " owner can delete the " + team + "."; cannotChangeDescription = "%prefix% &7You cannot change the " + team + "'s Description."; cannotChangeName = "%prefix% &7You cannot change the " + team + "'s Name."; + cannotChangeSettings = "%prefix% &7You cannot change the " + team + "'s Settings."; cannotSetHome = "%prefix% &7You cannot change the " + team + "'s Home."; + cannotManageWarps = "%prefix% &7You cannot manage the " + team + "'s Warps."; invalidUserRank = "%prefix% &7User rank doesn't exist."; invalidPermission = "%prefix% &7Permission doesn't exist."; permissionSet = "%prefix% &7%permission% permission set to %allowed% for %rank%'s."; + invalidSetting = "%prefix% &7Setting doesn't exist."; + invalidSettingValue = "%prefix% &7Setting Value doesn't exist."; + settingSet = "%prefix% &7%setting% set to %value%."; userNotInYourTeam = "%prefix% &7That user is not in your " + team + "."; cannotPromoteUser = "%prefix% &7You cannot promote this User"; cannotDemoteUser = "%prefix% &7You cannot demote this User"; + cannotOpenContainers = "%prefix% &7You cannot open containers in this " + team + "."; + cannotOpenDoors = "%prefix% &7You cannot open doors in this " + team + "."; + cannotTriggerRedstone = "%prefix% &7You cannot trigger redstone in this " + team + "."; + cannotBreakSpawners = "%prefix% &7You cannot break spawners in this " + team + "."; cannotBreakBlocks = "%prefix% &7You cannot break blocks in this " + team + "."; cannotPlaceBlocks = "%prefix% &7You cannot place blocks in this " + team + "."; + cannotKillMobs = "%prefix% &7You cannot kill mobs in this " + team + "."; + cannotUseBuckets = "%prefix% &7You cannot use buckets in this " + team + "."; promotedPlayer = "%prefix% &7You have promoted %player% to %rank%."; userPromotedPlayer = "%prefix% &7%promoter% has promoted %player% to %rank%."; demotedPlayer = "%prefix% &7You have demoted %player% to %rank%."; userDemotedPlayer = "%prefix% &7%demoter% has demoted %player% to %rank%."; - userAlreadyInTeam = "%prefix% &7That user is already a member of your " + team + ""; + userAlreadyInTeam = "%prefix% &7That user is already a member of your " + team + "."; inviteAlreadyPresent = "%prefix% &7There is already an active invite for that user."; teamInviteSent = "%prefix% &7You have sent a " + team + " invite to %player%."; teamInviteReceived = "%prefix% &7You have received a " + team + " invite from %player%."; + trustAlreadyPresent = "%prefix% &7This user is already trusted."; + teamTrustSent = "%prefix% &7You have trusted %player% in your " + team + "."; + teamTrustReceived = "%prefix% &7You have been trusted in %player%'s " + team + "."; + noActiveTrust = "%prefix% &7That user is not trusted in your " + team + "."; + teamTrustRevoked = "%prefix% &7You have revoked a " + team + " trust from %player%."; dontHaveInvite = "%prefix% &7You dont have an active invite for that " + team + "."; noActiveInvite = "%prefix% &7There is no active invite for that user."; teamInviteRevoked = "%prefix% &7You have revoked a " + team + " invite from %player%."; youHaveBeenKicked = "%prefix% &7You have been kicked from your " + team + " by %player%"; playerKicked = "%prefix% &7%player% has been kicked from your " + team + " by %kicker%"; - cannotKickHigherRank = "%prefix% &7You cannot kick somone with a higher rank than you."; + cannotKickHigherRank = "%prefix% &7You cannot kick someone with a higher rank than you."; + cannotKickYourself = "%prefix% &7You cannot kick yourself."; leftTeam = "%prefix% &7You have left the " + team + " %name%."; + ownerCannotLeave = "%prefix% &7You cannot leave your " + team + " try /" + command + " delete."; userLeftTeam = "%prefix% &7%player% has left your " + team + "."; teamDoesntExistByName = "%prefix% &7No " + team + " by that name exists."; + changedPlayerDescription = "%prefix% &7You changed %name%'s description to to %description%."; descriptionChanged = "%prefix% &7%player% has changed your " + team + "'s description to %description%."; + changedPlayerName = "%prefix% &7You changed %player%'s " + team + "'s name to to %name%."; nameChanged = "%prefix% &7%player% has changed your " + team + "'s name to %name%."; notInTeamLand = "%prefix% &7You must be inside your " + team + "'s land to do this."; homeSet = "%prefix% &7%player% has set " + team + "'s home."; @@ -164,6 +254,12 @@ public Messages(String team, String command, String pluginName, String color) { userJoinedTeam = "%prefix% &7%player% has joined your " + team + "."; bankWithdrew = "%prefix% &7You successfully withdrew %amount% %type% from your " + team + " bank."; bankDeposited = "%prefix% &7You successfully deposited %amount% %type% from your " + team + " bank."; + gaveBank = "%prefix% &7You gave %player% %amount% %item%."; + setBank = "%prefix% &7You set %player%'s %amount% to %item%."; + removedExperience = "%prefix% &7You took %amount% " + team + " experience from %player%."; + gaveExperience = "%prefix% &7You gave %amount% " + team + " experience to %player%."; + setExperience = "%prefix% &7You set %player%'s " + team + " experience to %amount%."; + removedBank = "%prefix% &7You took %amount% %item%'s from %player%."; insufficientFundsToWithdraw = "%prefix% &7You do not have enough %type% to withdraw from your " + team + " bank."; insufficientFundsToDeposit = "%prefix% &7You do not have enough %type% to deposit into your " + team + " bank."; noSuchBankItem = "%prefix% &7That bank item doesn't exist."; @@ -176,14 +272,54 @@ public Messages(String team, String command, String pluginName, String color) { flightNotActive = "%prefix% &7The flight booster is not currently active."; noSuchBooster = "%prefix% &7No booster by that name exists."; noSuchUpgrade = "%prefix% &7No Upgrade by that name exists."; - notHighEnoughLevel = "%prefix% &7You need to be atleast level %level% in your " + team + "."; + maxUpgradeLevelReached = "%prefix% &7Maximum upgrade level reached."; + notHighEnoughLevel = "%prefix% &7You need to be at least level %level% in your " + team + "."; notEnoughMoney = "%prefix% &7You dont have enough money to purchase this."; notEnoughBankItem = "%prefix% &7You dont have enough %bank% in your " + team + " Bank."; purchasedBooster = "%prefix% &7You have purchased a %booster% booster"; purchasedUpgrade = "%prefix% &7You have purchased a %upgrade% upgrade"; - teamValue = "%prefix% &7Your " + team + " Value is %value%"; calculatingTeams = "%prefix% &7%player% is recalculating value for %amount% " + team + "'s \n%prefix% &7Estimated time: %minutes% Minutes and %seconds% Seconds"; calculatingFinished = "%prefix% &7Recalculating " + team + "'s completed!"; calculationAlreadyInProcess = "%prefix% &7Recalculating " + team + "'s already in process."; + createdWarp = "%prefix% &7Created warp %name%."; + deletedWarp = "%prefix% &7%player% has deleted the warp %name%."; + warpAlreadyExists = "%prefix% &7A warp with that name already exists."; + warpLimitReached = "%prefix% &7" + team + " Warp limit has been reached."; + memberLimitReached = "%prefix% &7" + team + " Member limit has been reached."; + unknownWarp = "%prefix% &7No warp exists by that name."; + incorrectPassword = "%prefix% &7Incorrect password."; + teleportingWarp = "%prefix% &7teleporting to warp %name%."; + notSafe = "%prefix% &7This location is not safe."; + warpIconSet = "%prefix% &7warp icon set."; + warpDescriptionSet = "%prefix% &7warp description set."; + noSuchMaterial = "%prefix% &7Material doesn't exist."; + noShopCategory = "%prefix% &7There is no category with this name."; + inventoryFull = "%prefix% &7Your inventory is full!"; + noSuchItem = "%prefix% &7You don't have this item!"; + successfullyBought = "%prefix% &7You have successfully bought %amount%x %item% &7for $%vault_cost%."; + successfullySold = "%prefix% &7You have successfully sold %amount%x %item% &7for $%vault_reward%."; + cannotAfford = "%prefix% &7You cannot afford this."; + cannotVisit = "%prefix% &7You cannot visit that " + team + "."; + teamLevelUp = "%prefix% &7Your " + team + " has reached level %level%."; + activeCooldown = "%prefix% &7You cannot do that due to a running cooldown, please wait %hours% hour(s), %minutes% minute(s), %seconds% second(s)!"; + teamIsPrivate = "%prefix% &7That " + team + " has chosen not to be publicly viewable, you cannot do that."; + blockName = "Blocks"; + spawnerName = "Spawners"; + nullPlaceholder = "N/A"; + enabledPlaceholder = "Enabled"; + disabledPlaceholder = "Disabled"; + privatePlaceholder = "Private"; + publicPlaceholder = "Public"; + serverPlaceholder = "Server"; + sunnyPlaceholder = "Sunny"; + rainingPlaceholder = "Raining"; + sunrisePlaceholder = "Sunrise"; + dayPlaceholder = "Day"; + morningPlaceholder = "Morning"; + noonPlaceholder = "Noon"; + sunsetPlaceholder = "Sunset"; + nightPlaceholder = "Night"; + midnightPlaceholder = "Midnight"; + cannotInteract = "%prefix% &7You cannot interact with that."; } } diff --git a/src/main/java/com/iridium/iridiumteams/configs/Missions.java b/src/main/java/com/iridium/iridiumteams/configs/Missions.java new file mode 100644 index 00000000..92cf6ac5 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/configs/Missions.java @@ -0,0 +1,340 @@ +package com.iridium.iridiumteams.configs; + +import com.cryptomorin.xseries.XMaterial; +import com.cryptomorin.xseries.XSound; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.Item; +import com.iridium.iridiumteams.Reward; +import com.iridium.iridiumteams.missions.Mission; +import com.iridium.iridiumteams.missions.MissionData; +import com.iridium.iridiumteams.missions.MissionType; + +import java.util.*; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class Missions { + public Map missions; + + public List dailySlots = Arrays.asList(10, 12, 14, 16); + public Map> customMaterialLists = ImmutableMap.>builder() + .put("LOGS", Arrays.asList( + "OAK_LOG", + "BIRCH_LOG", + "SPRUCE_LOG", + "DARK_OAK_LOG", + "ACACIA_LOG", + "JUNGLE_LOG", + "CRIMSON_STEM", + "WARPED_STEM" + )) + .build(); + + public Missions() { + this("&c"); + } + + public Missions(String color) { + missions = ImmutableMap.builder() + + .put("farmer", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.SUGAR_CANE, 1, color + "&lFarmer", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Grow 10 Sugarcane: %progress_1%/10", + color + "&l* &7Grow 10 Wheat: %progress_2%/10", + color + "&l* &7Grow 10 Carrots: %progress_3%/10", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000", + "", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours %timeremaining_minutes% minutes and %timeremaining_seconds% seconds" + ) + ), Arrays.asList("GROW:SUGAR_CANE:10", "GROW:WHEAT:10", "GROW:CARROTS:10"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lFarmer Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Farmer mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )).build(), MissionType.DAILY)) + + .put("hunter", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.BONE, 1, color + "&lHunter", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Kill 10 Zombies: %progress_1%/10", + color + "&l* &7Kill 10 Skeletons: %progress_2%/10", + color + "&l* &7Kill 10 Creepers: %progress_3%/10", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000", + "", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours %timeremaining_minutes% minutes and %timeremaining_seconds% seconds" + ) + ), Arrays.asList("KILL:ZOMBIE:10", "KILL:SKELETON:10", "KILL:CREEPER:10"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lHunter Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Hunter mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )).build(), MissionType.DAILY)) + + .put("baker", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.BREAD, 1, color + "&lBaker", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Bake 64 Bread: %progress_1%/64", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000", + "", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours %timeremaining_minutes% minutes and %timeremaining_seconds% seconds" + ) + ), Collections.singletonList("CRAFT:BREAD:64"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lBaker Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Baker mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )).build(), MissionType.DAILY)) + + .put("miner", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.GOLD_ORE, 1, color + "&lMiner", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Mine 15 Iron Ores: %progress_1%/15", + color + "&l* &7Mine 30 Coal Ores: %progress_2%/30", + color + "&l* &7Mine 1 Diamond Ore: %progress_3%/1", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000", + "", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours %timeremaining_minutes% minutes and %timeremaining_seconds% seconds" + ) + ), Arrays.asList("MINE:IRON_ORE:15", "MINE:COAL_ORE:30", "MINE:DIAMOND_ORE:1"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lMiner Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Miner mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )).build(), MissionType.DAILY)) + + .put("fisherman", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.FISHING_ROD, 1, color + "&lFisherman", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Catch 10 Fish: %progress_1%/10", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000", + "", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours %timeremaining_minutes% minutes and %timeremaining_seconds% seconds" + ) + ), Collections.singletonList("FISH:ANY:10"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lFisherman Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Fisherman mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )).build(), MissionType.DAILY)) + + .put("blacksmith", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.IRON_INGOT, 1, color + "&lBlacksmith", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Smelt 30 Iron Ores: %progress_1%/30", + color + "&l* &7Smelt 15 Gold Ores: %progress_2%/15", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000", + "", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours %timeremaining_minutes% minutes and %timeremaining_seconds% seconds" + )), Arrays.asList("SMELT:" + (XMaterial.supports(17) ? XMaterial.RAW_IRON.name() : XMaterial.IRON_ORE.name()) + ":30", "SMELT:" + (XMaterial.supports(17) ? XMaterial.RAW_GOLD.name() : XMaterial.GOLD_ORE.name()) + ":15"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lBlacksmith Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Blacksmith mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )).build(), MissionType.DAILY)) + + .put("brewer", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.POTION, 1, color + "&lPotion Brewer", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Brew 3 Speed II Potions: %progress_1%/3", + color + "&l* &7Brew 3 Strength II Potions: %progress_2%/3", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000", + "", + color + "&l * &7Time Remaining: " + color + "%timeremaining_hours% hours %timeremaining_minutes% minutes and %timeremaining_seconds% seconds" + ) + ), Arrays.asList("BREW:SPEED:2:3", "BREW:STRENGTH:2:3"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lPotionBrewer Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Potion Brewer mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )).build(), MissionType.DAILY)) + + .put("mine_oak", new Mission(ImmutableMap.builder() + .put(1, new MissionData(new Item(XMaterial.OAK_LOG, 0, 1, color + "&lMine 10 Logs", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Mine 10 logs: %progress_1%/10", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + ) + ), Collections.singletonList("MINE:LOGS:10"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lPotionBrewer Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )) + .put(2, new MissionData(new Item(XMaterial.OAK_LOG, 0, 1, color + "&lMine 100 Logs", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Mine 100 logs: %progress_1%/100", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + ) + ), Collections.singletonList("MINE:LOGS:100"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lPotionBrewer Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )) + .put(3, new MissionData(new Item(XMaterial.OAK_LOG, 0, 1, color + "&lMine 1000 Logs", + Arrays.asList( + "&7Complete Island Missions to gain rewards", + "&7Which can be used to purchase Island Upgrades", + "", + color + "[!] &7Must be level 1 to complete this mission", + "", + color + "&lObjectives:", + color + "&l* &7Mine 1000 logs: %progress_1%/1000", + "", + color + "&lRewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + ) + ), Collections.singletonList("MINE:LOGS:1000"), 1, new Reward(new Item(XMaterial.DIAMOND, 1, color + "&lPotionBrewer Reward", + Arrays.asList( + color + "&l Rewards", + color + "&l* &75 Island Crystals", + color + "&l* &7$1000" + )), Collections.emptyList(), 1000, new HashMap<>(), 0, 10, XSound.ENTITY_PLAYER_LEVELUP), + "%prefix% &7Mission Completed!\n" + + color + "&l* &7+3 Island Experience\n" + + color + "&l* &7+5 Island Crystals\n" + + color + "&l* &7+1000 Money\n" + + "&7/is rewards to redeem rewards" + )) + .build(), MissionType.ONCE)) + .build(); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/configs/Permissions.java b/src/main/java/com/iridium/iridiumteams/configs/Permissions.java index 28e1586c..76a8be3d 100755 --- a/src/main/java/com/iridium/iridiumteams/configs/Permissions.java +++ b/src/main/java/com/iridium/iridiumteams/configs/Permissions.java @@ -1,7 +1,7 @@ package com.iridium.iridiumteams.configs; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; import com.iridium.iridiumteams.Permission; import java.util.Arrays; @@ -19,6 +19,7 @@ public class Permissions { public Permission description; public Permission doors; public Permission invite; + public Permission trust; public Permission kick; public Permission killMobs; public Permission openContainers; @@ -27,8 +28,9 @@ public class Permissions { public Permission rename; public Permission setHome; public Permission spawners; - public Permission unclaim; + public Permission settings; public Permission manageWarps; + public Permission interact; public Permissions() { this("Team", "&c"); @@ -46,16 +48,18 @@ public Permissions(String team, String color) { this.description = new Permission(new Item(XMaterial.WRITABLE_BOOK, 16, 1, "" + color + "Change Description", Arrays.asList("&7Grant the ability to change your " + team + " description.", "", "" + color + "&lPermission", "%permission%")), 1, 3); this.doors = new Permission(new Item(XMaterial.OAK_DOOR, 19, 1, "" + color + "Use Doors", Arrays.asList("&7Grant the ability to use doors or trapdoors in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); this.invite = new Permission(new Item(XMaterial.DIAMOND, 20, 1, "" + color + "Invite Users", Arrays.asList("&7Grant the ability to invite " + team + " members.", "", "" + color + "&lPermission", "%permission%")), 1, 2); - this.kick = new Permission(new Item(XMaterial.IRON_BOOTS, 21, 1, "" + color + "Kick Users", Arrays.asList("&7Grant the ability to kick " + team + " members.", "", "" + color + "&lPermission", "%permission%")), 1, 2); - this.killMobs = new Permission(new Item(XMaterial.DIAMOND_SWORD, 22, 1, "" + color + "Kill Mobs", Arrays.asList("&7Grant the ability to kill mobs in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); - this.openContainers = new Permission(new Item(XMaterial.CHEST, 23, 1, "" + color + "Open Containers", Arrays.asList("&7Grant the ability to open containers in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); - this.promote = new Permission(new Item(XMaterial.PLAYER_HEAD, 24, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2Y0NmFiYWQ5MjRiMjIzNzJiYzk2NmE2ZDUxN2QyZjFiOGI1N2ZkZDI2MmI0ZTA0ZjQ4MzUyZTY4M2ZmZjkyIn19fQ==", 1, "" + color + "Promote Users", Arrays.asList("&7Grant the ability to promote users in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 3); - this.redstone = new Permission(new Item(XMaterial.REDSTONE, 25, 1, "" + color + "Use Redstone", Arrays.asList("&7Grant the ability to use buttons, levels, or pressure plates in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); - this.rename = new Permission(new Item(XMaterial.PAPER, 28, 1, "" + color + "Rename " + team + "", Arrays.asList("&7Grant the ability to rename your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 3); - this.setHome = new Permission(new Item(XMaterial.WHITE_BED, 29, 1, "" + color + "" + team + " Home", Arrays.asList("&7Grant the ability to change your " + team + " home.", "", "" + color + "&lPermission", "%permission%")), 1, 2); - this.spawners = new Permission(new Item(XMaterial.SPAWNER, 30, 1, "" + color + "Break Spawners", Arrays.asList("&7Grant the ability to mine spawners in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); - this.unclaim = new Permission(new Item(XMaterial.GRASS_BLOCK, 31, 1, "" + color + "Un-Claim Land", Arrays.asList("&7Grant the ability to unclaim your " + team + " land.", "", "" + color + "&lPermission", "%permission%")), 1, 2); - this.manageWarps = new Permission(new Item(XMaterial.END_PORTAL_FRAME, 32, 1, "" + color + "Manage Warps", Arrays.asList("&7Grant the ability to create edit and delete " + team + " Warps.", "", "" + color + "&lPermission", "%permission%")), 1, 2); + this.trust = new Permission(new Item(XMaterial.EMERALD, 21, 1, "" + color + "Trust Users", Arrays.asList("&7Grant the ability to trust members in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 2); + this.kick = new Permission(new Item(XMaterial.IRON_BOOTS, 22, 1, "" + color + "Kick Users", Arrays.asList("&7Grant the ability to kick " + team + " members.", "", "" + color + "&lPermission", "%permission%")), 1, 2); + this.killMobs = new Permission(new Item(XMaterial.DIAMOND_SWORD, 23, 1, "" + color + "Kill Mobs", Arrays.asList("&7Grant the ability to kill mobs in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); + this.openContainers = new Permission(new Item(XMaterial.CHEST, 24, 1, "" + color + "Open Containers", Arrays.asList("&7Grant the ability to open containers in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); + this.promote = new Permission(new Item(XMaterial.PLAYER_HEAD, 25, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2Y0NmFiYWQ5MjRiMjIzNzJiYzk2NmE2ZDUxN2QyZjFiOGI1N2ZkZDI2MmI0ZTA0ZjQ4MzUyZTY4M2ZmZjkyIn19fQ==", 1, "" + color + "Promote Users", Arrays.asList("&7Grant the ability to promote users in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 3); + this.redstone = new Permission(new Item(XMaterial.REDSTONE, 28, 1, "" + color + "Use Redstone", Arrays.asList("&7Grant the ability to use buttons, levels, or pressure plates in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); + this.rename = new Permission(new Item(XMaterial.PAPER, 29, 1, "" + color + "Rename " + team + "", Arrays.asList("&7Grant the ability to rename your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 3); + this.setHome = new Permission(new Item(XMaterial.WHITE_BED, 30, 1, "" + color + "" + team + " Home", Arrays.asList("&7Grant the ability to change your " + team + " home.", "", "" + color + "&lPermission", "%permission%")), 1, 2); + this.spawners = new Permission(new Item(XMaterial.SPAWNER, 31, 1, "" + color + "Break Spawners", Arrays.asList("&7Grant the ability to mine spawners in your " + team + ".", "", "" + color + "&lPermission", "%permission%")), 1, 1); + this.settings = new Permission(new Item(XMaterial.GUNPOWDER, 32, 1, "" + color + "Change Settings", Arrays.asList("&7Grant the ability to change your " + team + " settings.", "", "" + color + "&lPermission", "%permission%")), 1, 3); + this.manageWarps = new Permission(new Item(XMaterial.END_PORTAL_FRAME, 33, 1, "" + color + "Manage Warps", Arrays.asList("&7Grant the ability to create edit and delete " + team + " Warps.", "", "" + color + "&lPermission", "%permission%")), 1, 2); + this.interact = new Permission(new Item(XMaterial.OAK_SIGN, 40, 1 , "" + color + "Edit Signs", Arrays.asList("Grants the ability to edit signs and item frames in the " + team + ".", "" + color + "&lPermission", "%permission%")), 1, 2); } } diff --git a/src/main/java/com/iridium/iridiumteams/configs/Settings.java b/src/main/java/com/iridium/iridiumteams/configs/Settings.java new file mode 100644 index 00000000..0b5ea09d --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/configs/Settings.java @@ -0,0 +1,43 @@ +package com.iridium.iridiumteams.configs; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.Item; +import com.iridium.iridiumteams.Setting; + +import java.util.Arrays; + +public class Settings { + + public Setting teamJoining; + public Setting teamValue; + public Setting mobSpawning; + public Setting leafDecay; + public Setting iceForm; + public Setting fireSpread; + public Setting cropTrample; + public Setting weather; + public Setting time; + public Setting entityGrief; + public Setting tntDamage; + public Setting visiting; + + public Settings() { + this("Team", "&c"); + } + + public Settings(String team, String color) { + teamJoining = new Setting(new Item(XMaterial.GUNPOWDER, 10, 1, color + team + " Type", Arrays.asList("&7Set your " + team + " joining method.", "", "" + color + "&lValue", "&7%value%")), "JoinType", "Private"); + teamValue = new Setting(new Item(XMaterial.SUNFLOWER, 11, 1, color + team + " Value Visibility", Arrays.asList("&7Set your " + team + " value.", "", "" + color + "&lValue", "&7%value%")), "ValueVisibility", "Public"); + mobSpawning = new Setting(new Item(XMaterial.SPAWNER, 12, 1, color + team + " Mob Spawning", Arrays.asList("&7Control Mob Spawning on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "MobSpawning", "Enabled"); + leafDecay = new Setting(new Item(XMaterial.JUNGLE_LEAVES, 13, 1, color + team + " Leaf Decay", Arrays.asList("&7Control Leaf Decay on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "LeafDecay", "Disabled"); + iceForm = new Setting(new Item(XMaterial.ICE, 14, 1, color + team + " Ice Form", Arrays.asList("&7Control Ice Forming on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "IceForm", "Disabled"); + fireSpread = new Setting(new Item(XMaterial.FLINT_AND_STEEL, 15, 1, color + team + " Fire Spread", Arrays.asList("&7Control Fire Spread on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "FireSpread", "Disabled"); + cropTrample = new Setting(new Item(XMaterial.WHEAT_SEEDS, 16, 1, color + team + " Crop Trample", Arrays.asList("&7Control Trampling Crops on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "CropTrample", "Enabled"); + weather = new Setting(new Item(XMaterial.BLAZE_POWDER, 19, 1, color + team + " Weather", Arrays.asList("&7Control Weather on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "Weather", "Server"); + time = new Setting(new Item(XMaterial.CLOCK, 20, 1, color + team + " Time", Arrays.asList("&7Control Time on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "Time", "Server"); + entityGrief = new Setting(new Item(XMaterial.ENDER_PEARL, 21, 1, color + team + " Entity Grief", Arrays.asList("&7Control Entity Grief on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "EntityGrief", "Disabled"); + tntDamage = new Setting(new Item(XMaterial.TNT, 22, 1, color + team + " TnT Damage", Arrays.asList("&7Control TnT Damage on your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "TnTDamage", "Enabled"); + visiting = new Setting(new Item(XMaterial.BEACON, 23, 1, color + team + " Visiting", Arrays.asList("&7Control if people can visit your " + team + ".", "", "" + color + "&lValue", "&7%value%")), "Visiting", "Enabled"); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/configs/Shop.java b/src/main/java/com/iridium/iridiumteams/configs/Shop.java new file mode 100644 index 00000000..9bf71676 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/configs/Shop.java @@ -0,0 +1,879 @@ +package com.iridium.iridiumteams.configs; + + +import com.cryptomorin.xseries.XMaterial; +import com.cryptomorin.xseries.XSound; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.Item; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import java.util.*; + +public class Shop { + + public Map categories; + public Map> items; + public String buyPriceLore; + public String sellRewardLore; + public String notPurchasableLore; + public String notSellableLore; + public String levelRequirementLore; + public boolean abbreviatePrices; + public boolean dropItemWhenFull; + public XSound failSound; + public XSound successSound; + public List shopItemLore; + + + public Shop() { + this("&c"); + } + + public Shop(String color) { + categories = ImmutableMap.builder() + .put("Blocks", new ShopCategory(new Item(XMaterial.GRASS_BLOCK, 12, 1, color + "&lBlocks", Collections.emptyList()), 54)) + .put("Food", new ShopCategory(new Item(XMaterial.COOKED_CHICKEN, 13, 1, color + "&lFood", Collections.emptyList()), 36)) + .put("Ores", new ShopCategory(new Item(XMaterial.GOLD_INGOT, 14, 1, color + "&lOres", Collections.emptyList()), 36)) + .put("Farming", new ShopCategory(new Item(XMaterial.WHEAT, 21, 1, color + "&lFarming", Collections.emptyList()), 45)) + .put("Mob Drops", new ShopCategory(new Item(XMaterial.SPIDER_EYE, 22, 1, color + "&lMob Drops", Collections.emptyList()), 45)) + .put("Miscellaneous", new ShopCategory(new Item(XMaterial.SADDLE, 23, 1, color + "&lMiscellaneous", Collections.emptyList()), 36)) + .build(); + + items = ImmutableMap.>builder() + .put("Blocks", Arrays.asList( + new ShopItem( + color + "&lGrass Block", + XMaterial.GRASS_BLOCK, + 1, + 10, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lDirt Block", + XMaterial.DIRT, + 10, + 11, + new Cost(50, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lGravel", + XMaterial.GRAVEL, + 10, + 12, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lGranite", + XMaterial.GRANITE, + 10, + 13, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lDiorite", + XMaterial.DIORITE, + 10, + 14, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lAndesite", + XMaterial.ANDESITE, + 10, + 15, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lOak Log", + XMaterial.OAK_LOG, + 16, + 16, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSpruce Log", + XMaterial.SPRUCE_LOG, + 16, + 19, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lBirch Log", + XMaterial.BIRCH_LOG, + 16, + 20, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lJungle Log", + XMaterial.JUNGLE_LOG, + 16, + 21, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lAcacia Log", + XMaterial.ACACIA_LOG, + 16, + 22, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lDark Oak Log", + XMaterial.DARK_OAK_LOG, + 16, + 23, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSnow Block", + XMaterial.SNOW_BLOCK, + 16, + 24, + new Cost(200, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lIce", + XMaterial.ICE, + 8, + 25, + new Cost(300, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lPacked Ice", + XMaterial.PACKED_ICE, + 8, + 28, + new Cost(300, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSponge", + XMaterial.SPONGE, + 4, + 29, + new Cost(1000, new HashMap<>()), + new Cost(200, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSand", + XMaterial.SAND, + 8, + 30, + new Cost(100, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSandstone", + XMaterial.SANDSTONE, + 16, + 31, + new Cost(80, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lClay Ball", + XMaterial.CLAY_BALL, + 32, + 32, + new Cost(70, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lObsidian", + XMaterial.OBSIDIAN, + 4, + 33, + new Cost(250, new HashMap<>()), + new Cost(25, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lGlowstone", + XMaterial.GLOWSTONE, + 8, + 34, + new Cost(125, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lEnd Stone", + XMaterial.END_STONE, + 4, + 39, + new Cost(250, new HashMap<>()), + new Cost(25, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lPrismarine", + XMaterial.PRISMARINE, + 16, + 40, + new Cost(200, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lWool", + XMaterial.WHITE_WOOL, + 8, + 41, + new Cost(50, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ) + )) + .put("Food", Arrays.asList( + new ShopItem( + color + "&lApple", + XMaterial.APPLE, + 10, + 11, + new Cost(50, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lEnchanted Golden Apple", + XMaterial.ENCHANTED_GOLDEN_APPLE, + 3, + 12, + new Cost(1000, new HashMap<>()), + new Cost(100, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lCarrot", + XMaterial.CARROT, + 10, + 13, + new Cost(100, new HashMap<>()), + new Cost(25, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lBaked Potato", + XMaterial.BAKED_POTATO, + 10, + 14, + new Cost(150, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lBread", + XMaterial.BREAD, + 10, + 15, + new Cost(50, new HashMap<>()), + new Cost(30, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lCookie", + XMaterial.COOKIE, + 5, + 20, + new Cost(130, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lCooked Porkchop", + XMaterial.COOKED_PORKCHOP, + 10, + 21, + new Cost(100, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lCooked Beef", + XMaterial.COOKED_BEEF, + 10, + 22, + new Cost(100, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lCooked Mutton", + XMaterial.COOKED_MUTTON, + 10, + 23, + new Cost(100, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lCooked Rabbit", + XMaterial.COOKED_RABBIT, + 10, + 24, + new Cost(100, new HashMap<>()), + new Cost(25, new HashMap<>()), + 1 + ) + ) + ) + .put("Ores", Arrays.asList( + new ShopItem( + color + "&lCoal", + XMaterial.COAL, + 16, + 11, + new Cost(100, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lRedstone", + XMaterial.REDSTONE, + 16, + 12, + new Cost(150, new HashMap<>()), + new Cost(7, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lLapis Lazuli", + XMaterial.LAPIS_LAZULI, + 16, + 13, + new Cost(150, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lIron Ingot", + XMaterial.IRON_INGOT, + 8, + 14, + new Cost(200, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lGold Ingot", + XMaterial.GOLD_INGOT, + 8, + 15, + new Cost(200, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lDiamond", + XMaterial.DIAMOND, + 8, + 21, + new Cost(1000, new HashMap<>()), + new Cost(100, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lEmerald", + XMaterial.EMERALD, + 8, + 22, + new Cost(200, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lQuartz", + XMaterial.QUARTZ, + 64, + 23, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ) + ) + ) + .put("Farming", Arrays.asList( + new ShopItem( + color + "&lWheat Seeds", + XMaterial.WHEAT_SEEDS, + 16, + 10, + new Cost(130, new HashMap<>()), + new Cost(2, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lPumpkin Seeds", + XMaterial.PUMPKIN_SEEDS, + 16, + 11, + new Cost(150, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lMelon Seeds", + XMaterial.MELON_SEEDS, + 16, + 12, + new Cost(250, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lNether Wart", + XMaterial.NETHER_WART, + 4, + 13, + new Cost(100, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSugar Cane", + XMaterial.SUGAR_CANE, + 16, + 14, + new Cost(150, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lWheat", + XMaterial.WHEAT, + 16, + 15, + new Cost(50, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lPumpkin", + XMaterial.PUMPKIN, + 16, + 16, + new Cost(150, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lMelon Slice", + XMaterial.MELON_SLICE, + 16, + 19, + new Cost(150, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lCactus", + XMaterial.CACTUS, + 8, + 20, + new Cost(80, new HashMap<>()), + new Cost(2, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lOak Sapling", + XMaterial.OAK_SAPLING, + 4, + 21, + new Cost(20, new HashMap<>()), + new Cost(2, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSpruce Sapling", + XMaterial.SPRUCE_SAPLING, + 4, + 22, + new Cost(20, new HashMap<>()), + new Cost(2, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lBirch Sapling", + XMaterial.BIRCH_SAPLING, + 4, + 23, + new Cost(20, new HashMap<>()), + new Cost(2, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lJungle Sapling", + XMaterial.JUNGLE_SAPLING, + 4, + 24, + new Cost(150, new HashMap<>()), + new Cost(4, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lAcacia Sapling", + XMaterial.ACACIA_SAPLING, + 4, + 25, + new Cost(20, new HashMap<>()), + new Cost(2, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lDark Oak Sapling", + XMaterial.DARK_OAK_SAPLING, + 4, + 30, + new Cost(150, new HashMap<>()), + new Cost(4, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lBrown Mushroom", + XMaterial.BROWN_MUSHROOM, + 8, + 31, + new Cost(60, new HashMap<>()), + new Cost(6, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lRed Mushroom", + XMaterial.RED_MUSHROOM, + 8, + 32, + new Cost(60, new HashMap<>()), + new Cost(6, new HashMap<>()), + 1 + ) + ) + ) + .put("Mob Drops", Arrays.asList( + new ShopItem( + color + "&lRotten Flesh", + XMaterial.ROTTEN_FLESH, + 16, + 10, + new Cost(20, new HashMap<>()), + new Cost(2, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lBone", + XMaterial.BONE, + 16, + 11, + new Cost(100, new HashMap<>()), + new Cost(3, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lGunpowder", + XMaterial.GUNPOWDER, + 16, + 12, + new Cost(30, new HashMap<>()), + new Cost(3, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lString", + XMaterial.STRING, + 16, + 13, + new Cost(80, new HashMap<>()), + new Cost(3, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lArrow", + XMaterial.ARROW, + 16, + 14, + new Cost(75, new HashMap<>()), + new Cost(4, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSpider Eye", + XMaterial.SPIDER_EYE, + 16, + 15, + new Cost(50, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lEnder Pearl", + XMaterial.ENDER_PEARL, + 3, + 16, + new Cost(75, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSlime Ball", + XMaterial.SLIME_BALL, + 16, + 19, + new Cost(200, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lPrismarine Crystals", + XMaterial.PRISMARINE_CRYSTALS, + 16, + 20, + new Cost(50, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lPrismarine Shard", + XMaterial.PRISMARINE_SHARD, + 16, + 21, + new Cost(50, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lBlaze Rod", + XMaterial.BLAZE_ROD, + 4, + 22, + new Cost(250, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lMagma Cream", + XMaterial.MAGMA_CREAM, + 4, + 23, + new Cost(150, new HashMap<>()), + new Cost(15, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lGhast Tear", + XMaterial.GHAST_TEAR, + 4, + 24, + new Cost(200, new HashMap<>()), + new Cost(30, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lLeather", + XMaterial.LEATHER, + 8, + 25, + new Cost(50, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lRabbit Foot", + XMaterial.RABBIT_FOOT, + 4, + 30, + new Cost(250, new HashMap<>()), + new Cost(30, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lInk Sack", + XMaterial.INK_SAC, + 8, + 31, + new Cost(50, new HashMap<>()), + new Cost(5, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lFeather", + XMaterial.FEATHER, + 16, + 32, + new Cost(30, new HashMap<>()), + new Cost(3, new HashMap<>()), + 1 + ) + ) + ) + .put("Miscellaneous", Arrays.asList( + new ShopItem( + color + "&lBucket", + XMaterial.BUCKET, + 1, + 12, + new Cost(100, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lWater Bucket", + XMaterial.WATER_BUCKET, + 1, + 13, + new Cost(200, new HashMap<>()), + new Cost(10, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lLava Bucket", + XMaterial.LAVA_BUCKET, + 1, + 14, + new Cost(200, new HashMap<>()), + new Cost(20, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lName Tag", + XMaterial.NAME_TAG, + 1, + 21, + new Cost(200, new HashMap<>()), + new Cost(30, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lSaddle", + XMaterial.SADDLE, + 1, + 22, + new Cost(300, new HashMap<>()), + new Cost(30, new HashMap<>()), + 1 + ), + new ShopItem( + color + "&lEnd Portal Frame", + XMaterial.END_PORTAL_FRAME, + 1, + 23, + new Cost(5000, new HashMap<>()), + new Cost(0, new HashMap<>()), + 1 + ) + ) + ) + .build(); + + buyPriceLore = "&aBuy Price: $%vault_cost%"; + sellRewardLore = "&cSelling Reward: $%vault_reward%"; + notPurchasableLore = "&cThis item cannot be purchased!"; + notSellableLore = "&cThis item cannot be sold!"; + levelRequirementLore = "&9[!] &7Must be level %minLevel% to purchase"; + + abbreviatePrices = true; + dropItemWhenFull = false; + + failSound = XSound.BLOCK_ANVIL_LAND; + successSound = XSound.ENTITY_PLAYER_LEVELUP; + + shopItemLore = Arrays.asList( + " ", + color + "&l[!] " + color + "Left-Click to Purchase %amount%, Shift for 64", + color + "&l[!] " + color + "Right Click to Sell %amount%, Shift for 64" + ); + } + + @NoArgsConstructor + @AllArgsConstructor + public static class ShopCategory { + public Item item; + public int inventorySize; + } + + @NoArgsConstructor + @AllArgsConstructor + public static class ShopItem { + public String name; + public XMaterial type; + public List lore; + public String command; + public int defaultAmount; + public int slot; + public int page; + public Cost buyCost; + public Cost sellCost; + public int minLevel; + + public ShopItem(String name, XMaterial type, int defaultAmount, int slot, Cost buyCost, Cost sellCost, int minLevel) { + this.name = name; + this.type = type; + this.lore = Collections.emptyList(); + this.defaultAmount = defaultAmount; + this.slot = slot; + this.page = 1; + this.buyCost = buyCost; + this.sellCost = sellCost; + this.minLevel = minLevel; + } + + public ShopItem(String name, XMaterial type, int defaultAmount, int slot, int page, Cost buyCost, Cost sellCost, int minLevel) { + this.name = name; + this.type = type; + this.lore = Collections.emptyList(); + this.defaultAmount = defaultAmount; + this.slot = slot; + this.page = page; + this.buyCost = buyCost; + this.sellCost = sellCost; + this.minLevel = minLevel; + } + } + + @AllArgsConstructor + @NoArgsConstructor + public static class Cost { + public double money; + public Map bankItems; + + @JsonIgnore + public boolean canPurchase() { + return money > 0 || bankItems.values().stream().anyMatch(value -> value > 0); + } + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/configs/Top.java b/src/main/java/com/iridium/iridiumteams/configs/Top.java index 2b9a4303..81f2c2ef 100644 --- a/src/main/java/com/iridium/iridiumteams/configs/Top.java +++ b/src/main/java/com/iridium/iridiumteams/configs/Top.java @@ -1,7 +1,7 @@ package com.iridium.iridiumteams.configs; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; import com.iridium.iridiumteams.database.Team; import com.iridium.iridiumteams.sorting.ExperienceTeamSort; import com.iridium.iridiumteams.sorting.ValueTeamSort; diff --git a/src/main/java/com/iridium/iridiumteams/configs/inventories/BlockValuesTypeSelectorInventoryConfig.java b/src/main/java/com/iridium/iridiumteams/configs/inventories/BlockValuesTypeSelectorInventoryConfig.java new file mode 100644 index 00000000..36471737 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/configs/inventories/BlockValuesTypeSelectorInventoryConfig.java @@ -0,0 +1,27 @@ +package com.iridium.iridiumteams.configs.inventories; + +import com.iridium.iridiumcore.Background; +import com.iridium.iridiumcore.Item; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class BlockValuesTypeSelectorInventoryConfig extends NoItemGUI { + public BlockTypeItem blocks; + public BlockTypeItem spawners; + + public BlockValuesTypeSelectorInventoryConfig(int size, String title, Background background, BlockTypeItem blocks, BlockTypeItem spawners) { + this.size = size; + this.title = title; + this.background = background; + this.blocks = blocks; + this.spawners = spawners; + } + + @AllArgsConstructor + @NoArgsConstructor + public static class BlockTypeItem { + public Item item; + public boolean enabled; + } +} diff --git a/src/main/java/com/iridium/iridiumteams/configs/inventories/MissionTypeSelectorInventoryConfig.java b/src/main/java/com/iridium/iridiumteams/configs/inventories/MissionTypeSelectorInventoryConfig.java new file mode 100755 index 00000000..6f05d772 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/configs/inventories/MissionTypeSelectorInventoryConfig.java @@ -0,0 +1,32 @@ +package com.iridium.iridiumteams.configs.inventories; + +import com.iridium.iridiumcore.Background; +import com.iridium.iridiumcore.Item; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class MissionTypeSelectorInventoryConfig extends NoItemGUI { + public MissionTypeItem daily; + public MissionTypeItem weekly; + public MissionTypeItem infinite; + public MissionTypeItem once; + + + public MissionTypeSelectorInventoryConfig(int size, String title, Background background, MissionTypeItem daily, MissionTypeItem weekly, MissionTypeItem infinite, MissionTypeItem once) { + this.size = size; + this.title = title; + this.background = background; + this.daily = daily; + this.weekly = weekly; + this.infinite = infinite; + this.once = once; + } + + @AllArgsConstructor + @NoArgsConstructor + public static class MissionTypeItem { + public Item item; + public boolean enabled; + } +} diff --git a/src/main/java/com/iridium/iridiumteams/database/DatabaseObject.java b/src/main/java/com/iridium/iridiumteams/database/DatabaseObject.java new file mode 100755 index 00000000..7344235c --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/DatabaseObject.java @@ -0,0 +1,11 @@ +package com.iridium.iridiumteams.database; + +import lombok.Getter; +import lombok.Setter; + + +@Setter +@Getter +public class DatabaseObject { + private boolean changed = true; +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/database/IridiumUser.java b/src/main/java/com/iridium/iridiumteams/database/IridiumUser.java index 0304984d..b91f5c59 100755 --- a/src/main/java/com/iridium/iridiumteams/database/IridiumUser.java +++ b/src/main/java/com/iridium/iridiumteams/database/IridiumUser.java @@ -1,15 +1,10 @@ package com.iridium.iridiumteams.database; import com.iridium.iridiumteams.IridiumTeams; -import com.iridium.iridiumteams.enhancements.Enhancement; -import com.iridium.iridiumteams.enhancements.EnhancementAffectsType; -import com.iridium.iridiumteams.enhancements.EnhancementData; -import com.iridium.iridiumteams.enhancements.PotionEnhancementData; +import com.iridium.iridiumteams.enhancements.*; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; -import lombok.AccessLevel; import lombok.Getter; -import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; @@ -21,9 +16,8 @@ import java.util.*; @Getter -@Setter @DatabaseTable(tableName = "users") -public class IridiumUser { +public class IridiumUser extends DatabaseObject { @DatabaseField(columnName = "uuid", canBeNull = false, id = true) private @NotNull UUID uuid; @@ -38,13 +32,14 @@ public class IridiumUser { @DatabaseField(columnName = "join_time") private LocalDateTime joinTime; + @DatabaseField(columnName = "active_profile", canBeNull = false) + private @NotNull UUID activeProfile = UUID.randomUUID(); private boolean bypassing; private boolean flying; private String chatType = ""; - @Setter(AccessLevel.NONE) private BukkitTask bukkitTask; private int bukkitTaskTicks = 0; @@ -59,6 +54,32 @@ public Player getPlayer() { return Bukkit.getServer().getPlayer(uuid); } + public boolean canFly(IridiumTeams iridiumTeams) { + Player player = getPlayer(); + + if (isBypassing()) return true; // bypass should be checked first, since this is an admin permission + if (player.hasPermission(iridiumTeams.getCommands().flyCommand.getFlyAnywherePermission())) return true; + + Optional team = iridiumTeams.getTeamManager().getTeamViaID(getTeamID()); + Optional visitor = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player); + if (player.hasPermission(iridiumTeams.getCommands().flyCommand.permission) && team.isPresent() && team.map(T::getId).orElse(-1).equals(visitor.map(T::getId).orElse(-1))) { + return true; + } + return canFly(team.orElse(null), iridiumTeams) || canFly(visitor.orElse(null), iridiumTeams); + } + + private boolean canFly(T team, IridiumTeams iridiumTeams) { + if (team == null) return false; + Enhancement flightEnhancement = iridiumTeams.getEnhancements().flightEnhancement; + TeamEnhancement teamEnhancement = iridiumTeams.getTeamManager().getTeamEnhancement(team, "flight"); + FlightEnhancementData data = flightEnhancement.levels.get(teamEnhancement.getLevel()); + + if (!teamEnhancement.isActive(flightEnhancement.type)) return false; + if (data == null) return false; + + return canApply(iridiumTeams, team, data.enhancementAffectsType); + } + public void initBukkitTask(IridiumTeams iridiumTeams) { if (bukkitTask != null) return; bukkitTask = Bukkit.getScheduler().runTaskTimer(iridiumTeams, () -> bukkitTask(iridiumTeams), 0, 20); @@ -128,4 +149,41 @@ public boolean canApply(IridiumTeams iridiumTeams, T team, List(this, newLevel)); + } + this.maxExperience = Math.max(maxExperience, experience); + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamBank.java b/src/main/java/com/iridium/iridiumteams/database/TeamBank.java index 5834a28e..51d78a27 100755 --- a/src/main/java/com/iridium/iridiumteams/database/TeamBank.java +++ b/src/main/java/com/iridium/iridiumteams/database/TeamBank.java @@ -4,7 +4,6 @@ import com.j256.ormlite.table.DatabaseTable; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import org.jetbrains.annotations.NotNull; @Getter @@ -12,14 +11,13 @@ @DatabaseTable(tableName = "team_bank") public class TeamBank extends TeamData { - @DatabaseField(columnName = "id", generatedId = true, canBeNull = false, uniqueCombo = true) + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) private int id; @DatabaseField(columnName = "bank_item", uniqueCombo = true) private String bankItem; @DatabaseField(columnName = "number") - @Setter private double number; public TeamBank(@NotNull Team team, @NotNull String bankItem, double number) { @@ -27,4 +25,9 @@ public TeamBank(@NotNull Team team, @NotNull String bankItem, double number) { this.bankItem = bankItem; this.number = number; } + + public void setNumber(double number) { + this.number = number; + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamBlock.java b/src/main/java/com/iridium/iridiumteams/database/TeamBlock.java index 92dc4a47..e8316816 100755 --- a/src/main/java/com/iridium/iridiumteams/database/TeamBlock.java +++ b/src/main/java/com/iridium/iridiumteams/database/TeamBlock.java @@ -1,11 +1,10 @@ package com.iridium.iridiumteams.database; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.cryptomorin.xseries.XMaterial; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import org.jetbrains.annotations.NotNull; @Getter @@ -13,14 +12,13 @@ @DatabaseTable(tableName = "team_blocks") public class TeamBlock extends TeamData { - @DatabaseField(columnName = "id", generatedId = true, canBeNull = false, uniqueCombo = true) + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) private int id; @DatabaseField(columnName = "block", uniqueCombo = true) private XMaterial xMaterial; @DatabaseField(columnName = "amount", canBeNull = false) - @Setter private int amount; public TeamBlock(@NotNull Team team, XMaterial xMaterial, int amount) { @@ -28,4 +26,9 @@ public TeamBlock(@NotNull Team team, XMaterial xMaterial, int amount) { this.xMaterial = xMaterial; this.amount = amount; } + + public void setAmount(int amount) { + this.amount = amount; + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamData.java b/src/main/java/com/iridium/iridiumteams/database/TeamData.java index 265c6e21..9955fb67 100755 --- a/src/main/java/com/iridium/iridiumteams/database/TeamData.java +++ b/src/main/java/com/iridium/iridiumteams/database/TeamData.java @@ -8,8 +8,8 @@ @NoArgsConstructor @Getter @Setter -public class TeamData { - @DatabaseField(columnName = "team_id", canBeNull = false) +public class TeamData extends DatabaseObject{ + @DatabaseField(columnName = "team_id", canBeNull = false, uniqueCombo = true) private int teamID; public TeamData(Team team) { diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamEnhancement.java b/src/main/java/com/iridium/iridiumteams/database/TeamEnhancement.java index 9f0086e4..1c1aa21d 100755 --- a/src/main/java/com/iridium/iridiumteams/database/TeamEnhancement.java +++ b/src/main/java/com/iridium/iridiumteams/database/TeamEnhancement.java @@ -5,7 +5,6 @@ import com.j256.ormlite.table.DatabaseTable; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import org.jetbrains.annotations.NotNull; import java.time.LocalDateTime; @@ -16,18 +15,16 @@ @DatabaseTable(tableName = "team_enhancements") public final class TeamEnhancement extends TeamData { - @DatabaseField(columnName = "id", generatedId = true, canBeNull = false, uniqueCombo = true) + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) private int id; @DatabaseField(columnName = "enhancement_name", canBeNull = false, uniqueCombo = true) private String enhancementName; @DatabaseField(columnName = "level", canBeNull = false) - @Setter private int level; @DatabaseField(columnName = "start_time", canBeNull = false) - @Setter private LocalDateTime expirationTime; public TeamEnhancement(@NotNull Team team, String enhancementName, int level) { @@ -50,4 +47,13 @@ public long getRemainingTime() { return LocalDateTime.now().until(expirationTime, ChronoUnit.SECONDS); } + public void setLevel(int level) { + this.level = level; + setChanged(true); + } + + public void setExpirationTime(LocalDateTime expirationTime) { + this.expirationTime = expirationTime; + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamInvite.java b/src/main/java/com/iridium/iridiumteams/database/TeamInvite.java index 46ae61b4..8c9954a2 100755 --- a/src/main/java/com/iridium/iridiumteams/database/TeamInvite.java +++ b/src/main/java/com/iridium/iridiumteams/database/TeamInvite.java @@ -4,7 +4,6 @@ import com.j256.ormlite.table.DatabaseTable; import lombok.Getter; import lombok.NoArgsConstructor; -import org.jetbrains.annotations.NotNull; import java.time.LocalDateTime; import java.util.UUID; @@ -16,16 +15,16 @@ public class TeamInvite extends TeamData { @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) private int id; - @DatabaseField(columnName = "user", canBeNull = false) - private @NotNull UUID user; + @DatabaseField(columnName = "user", canBeNull = false, uniqueCombo = true) + private UUID user; @DatabaseField(columnName = "inviter", canBeNull = false) - private @NotNull UUID invitee; + private UUID invitee; @DatabaseField(columnName = "time", canBeNull = false) private LocalDateTime time; - public TeamInvite(@NotNull Team team, @NotNull UUID user, @NotNull UUID invitee) { + public TeamInvite(Team team, UUID user, UUID invitee) { super(team); this.user = user; this.invitee = invitee; diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamMission.java b/src/main/java/com/iridium/iridiumteams/database/TeamMission.java new file mode 100755 index 00000000..1ad75a2c --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/TeamMission.java @@ -0,0 +1,49 @@ +package com.iridium.iridiumteams.database; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +@Getter +@NoArgsConstructor +@DatabaseTable(tableName = "team_mission") +public class TeamMission extends TeamData { + + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) + private int id; + + @DatabaseField(columnName = "mission_name", uniqueCombo = true) + private String missionName; + + @DatabaseField(columnName = "mission_level", uniqueCombo = true) + private int missionLevel; + @DatabaseField(columnName = "expiration") + private LocalDateTime expiration; + + public TeamMission(@NotNull Team team, String missionName, LocalDateTime expiration) { + super(team); + this.missionName = missionName; + this.expiration = expiration; + this.missionLevel = 1; + } + + public long getRemainingTime() { + if (expiration == null) return 0; + return LocalDateTime.now().until(expiration, ChronoUnit.SECONDS); + } + + public boolean hasExpired() { + if (expiration == null) return false; + return expiration.isBefore(LocalDateTime.now()); + } + + public void setMissionLevel(int missionLevel) { + this.missionLevel = missionLevel; + setChanged(true); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamMissionData.java b/src/main/java/com/iridium/iridiumteams/database/TeamMissionData.java new file mode 100755 index 00000000..b2a34efe --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/TeamMissionData.java @@ -0,0 +1,34 @@ +package com.iridium.iridiumteams.database; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@DatabaseTable(tableName = "team_mission_data") +public class TeamMissionData extends DatabaseObject{ + + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) + private int id; + + @DatabaseField(columnName = "mission_id", uniqueCombo = true) + private int missionID; + + @DatabaseField(columnName = "mission_index", uniqueCombo = true) + private int missionIndex; + + @DatabaseField(columnName = "progress") + private int progress; + + public TeamMissionData(TeamMission teamMission, int missionIndex) { + this.missionID = teamMission.getId(); + this.missionIndex = missionIndex; + } + + public void setProgress(int progress) { + this.progress = progress; + setChanged(true); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamPermission.java b/src/main/java/com/iridium/iridiumteams/database/TeamPermission.java index e3ca6970..c2b537c8 100755 --- a/src/main/java/com/iridium/iridiumteams/database/TeamPermission.java +++ b/src/main/java/com/iridium/iridiumteams/database/TeamPermission.java @@ -4,32 +4,33 @@ import com.j256.ormlite.table.DatabaseTable; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; -import org.jetbrains.annotations.NotNull; @Getter @NoArgsConstructor @DatabaseTable(tableName = "team_permissions") public final class TeamPermission extends TeamData { - @DatabaseField(columnName = "id", generatedId = true, canBeNull = false, uniqueCombo = true) + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) private int id; @DatabaseField(columnName = "permission", canBeNull = false, uniqueCombo = true) - private @NotNull String permission; + private String permission; @DatabaseField(columnName = "rank", canBeNull = false) private int rank; @DatabaseField(columnName = "allowed", canBeNull = false) - @Setter private boolean allowed; - public TeamPermission(@NotNull Team team, @NotNull String permission, int rank, boolean allowed) { + public TeamPermission(Team team, String permission, int rank, boolean allowed) { super(team); this.permission = permission; this.rank = rank; this.allowed = allowed; } + public void setAllowed(boolean allowed) { + this.allowed = allowed; + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamReward.java b/src/main/java/com/iridium/iridiumteams/database/TeamReward.java new file mode 100755 index 00000000..334219c1 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/TeamReward.java @@ -0,0 +1,25 @@ +package com.iridium.iridiumteams.database; + +import com.iridium.iridiumteams.Reward; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; + +@Getter +@NoArgsConstructor +@DatabaseTable(tableName = "team_rewards") +public class TeamReward extends TeamData { + + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false, uniqueCombo = true) + private int id; + + @DatabaseField(columnName = "reward", canBeNull = false, width = 2048) + private Reward reward; + + public TeamReward(@NotNull Team team, Reward reward) { + super(team); + this.reward = reward; + } +} diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamSetting.java b/src/main/java/com/iridium/iridiumteams/database/TeamSetting.java new file mode 100755 index 00000000..b5994b87 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/TeamSetting.java @@ -0,0 +1,32 @@ +package com.iridium.iridiumteams.database; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@DatabaseTable(tableName = "team_settings") +public final class TeamSetting extends TeamData { + + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) + private int id; + + @DatabaseField(columnName = "setting", canBeNull = false, uniqueCombo = true) + private String setting; + + @DatabaseField(columnName = "value", canBeNull = false) + private String value; + + public TeamSetting(Team team, String setting, String value) { + super(team); + this.setting = setting; + this.value = value; + } + + public void setValue(String value) { + this.value = value; + setChanged(true); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamSpawners.java b/src/main/java/com/iridium/iridiumteams/database/TeamSpawners.java index e6a687ec..db40268c 100755 --- a/src/main/java/com/iridium/iridiumteams/database/TeamSpawners.java +++ b/src/main/java/com/iridium/iridiumteams/database/TeamSpawners.java @@ -4,7 +4,6 @@ import com.j256.ormlite.table.DatabaseTable; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import org.bukkit.entity.EntityType; import org.jetbrains.annotations.NotNull; @@ -13,14 +12,13 @@ @DatabaseTable(tableName = "team_spawners") public class TeamSpawners extends TeamData { - @DatabaseField(columnName = "id", generatedId = true, canBeNull = false, uniqueCombo = true) + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) private int id; @DatabaseField(columnName = "spawner", uniqueCombo = true) private EntityType entityType; @DatabaseField(columnName = "amount", canBeNull = false) - @Setter private int amount; public TeamSpawners(@NotNull Team team, EntityType entityType, int amount) { @@ -28,4 +26,9 @@ public TeamSpawners(@NotNull Team team, EntityType entityType, int amount) { this.entityType = entityType; this.amount = amount; } + + public void setAmount(int amount) { + this.amount = amount; + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamTrust.java b/src/main/java/com/iridium/iridiumteams/database/TeamTrust.java new file mode 100755 index 00000000..1de5f93d --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/TeamTrust.java @@ -0,0 +1,33 @@ +package com.iridium.iridiumteams.database; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +@NoArgsConstructor +@DatabaseTable(tableName = "team_trusts") +public class TeamTrust extends TeamData { + + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) + private int id; + @DatabaseField(columnName = "user", canBeNull = false, uniqueCombo = true) + private UUID user; + + @DatabaseField(columnName = "truster", canBeNull = false) + private UUID truster; + + @DatabaseField(columnName = "time", canBeNull = false) + private LocalDateTime time; + + public TeamTrust(Team team, UUID user, UUID truster) { + super(team); + this.user = user; + this.truster = truster; + this.time = LocalDateTime.now(); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/database/TeamWarp.java b/src/main/java/com/iridium/iridiumteams/database/TeamWarp.java new file mode 100755 index 00000000..368c720e --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/TeamWarp.java @@ -0,0 +1,72 @@ +package com.iridium.iridiumteams.database; + +import com.cryptomorin.xseries.XMaterial; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.bukkit.Location; +import org.jetbrains.annotations.NotNull; + +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +@NoArgsConstructor +@DatabaseTable(tableName = "team_warps") +public class TeamWarp extends TeamData { + + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) + private int id; + + @DatabaseField(columnName = "location") + private Location location; + + @DatabaseField(columnName = "name", uniqueCombo = true) + private String name; + + @DatabaseField(columnName = "password") + private String password; + + @DatabaseField(columnName = "description") + private String description; + + @DatabaseField(columnName = "icon") + private XMaterial icon; + + @DatabaseField(columnName = "user", canBeNull = false) + private UUID user; + @DatabaseField(columnName = "create_time") + private LocalDateTime createTime; + + public TeamWarp(@NotNull Team team, UUID user, Location location, String name) { + super(team); + this.location = location; + this.name = name; + this.icon = XMaterial.STONE; + this.description = ""; + this.user = user; + this.createTime = LocalDateTime.now(); + } + + public TeamWarp(@NotNull Team team, UUID user, Location location, String name, String password) { + super(team); + this.location = location; + this.name = name; + this.password = password; + this.icon = XMaterial.STONE; + this.description = ""; + this.user = user; + this.createTime = LocalDateTime.now(); + } + + public void setDescription(String description) { + this.description = description; + setChanged(true); + } + + public void setIcon(XMaterial icon) { + this.icon = icon; + setChanged(true); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/database/types/RewardType.java b/src/main/java/com/iridium/iridiumteams/database/types/RewardType.java new file mode 100644 index 00000000..8084c305 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/types/RewardType.java @@ -0,0 +1,38 @@ +package com.iridium.iridiumteams.database.types; + +import com.iridium.iridiumcore.Persist; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.Reward; +import com.j256.ormlite.field.FieldType; +import com.j256.ormlite.field.SqlType; +import com.j256.ormlite.field.types.StringType; + +import java.sql.SQLException; + +public class RewardType extends StringType { + + private static final RewardType instance = new RewardType(); + private static Persist persist; + + public static RewardType getSingleton(IridiumTeams iridiumTeams) { + persist = new Persist(Persist.PersistType.JSON, iridiumTeams); + return instance; + } + + protected RewardType() { + super(SqlType.STRING, new Class[]{Reward.class}); + } + + @Override + public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException { + String value = (String) super.sqlArgToJava(fieldType, sqlArg, columnPos); + return persist.load(Reward.class, value); + } + + @Override + public Object javaToSqlArg(FieldType fieldType, Object object) { + Reward reward = (Reward) object; + return persist.toString(reward); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/database/types/XBiomeType.java b/src/main/java/com/iridium/iridiumteams/database/types/XBiomeType.java new file mode 100644 index 00000000..ed5a955f --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/types/XBiomeType.java @@ -0,0 +1,36 @@ +package com.iridium.iridiumteams.database.types; + +import com.cryptomorin.xseries.XBiome; +import com.j256.ormlite.field.FieldType; +import com.j256.ormlite.field.SqlType; +import com.j256.ormlite.field.types.StringType; + +import java.sql.SQLException; +import java.util.Optional; + +public class XBiomeType extends StringType { + + private static final XBiomeType instance = new XBiomeType(); + + public static XBiomeType getSingleton() { + return instance; + } + + protected XBiomeType() { + super(SqlType.STRING, new Class[] { XBiome.class }); + } + + @Override + public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException { + String value = (String) super.sqlArgToJava(fieldType, sqlArg, columnPos); + Optional biome = XBiome.of(value); + return biome.orElse(null); + } + + @Override + public Object javaToSqlArg(FieldType fieldType, Object object) throws SQLException { + XBiome biome = (XBiome) object; + return super.javaToSqlArg(fieldType, biome.toString()); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/database/types/XEnchantmentType.java b/src/main/java/com/iridium/iridiumteams/database/types/XEnchantmentType.java new file mode 100644 index 00000000..034f086b --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/types/XEnchantmentType.java @@ -0,0 +1,36 @@ +package com.iridium.iridiumteams.database.types; + +import com.cryptomorin.xseries.XEnchantment; +import com.j256.ormlite.field.FieldType; +import com.j256.ormlite.field.SqlType; +import com.j256.ormlite.field.types.StringType; + +import java.sql.SQLException; +import java.util.Optional; + +public class XEnchantmentType extends StringType { + + private static final XEnchantmentType instance = new XEnchantmentType(); + + public static XEnchantmentType getSingleton() { + return instance; + } + + protected XEnchantmentType() { + super(SqlType.STRING, new Class[] { XEnchantment.class }); + } + + @Override + public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException { + String value = (String) super.sqlArgToJava(fieldType, sqlArg, columnPos); + Optional enchantment = XEnchantment.of(value); + return enchantment.orElse(null); + } + + @Override + public Object javaToSqlArg(FieldType fieldType, Object object) throws SQLException { + XEnchantment enchant = (XEnchantment) object; + return super.javaToSqlArg(fieldType, enchant.toString()); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/database/types/XEntityTypeType.java b/src/main/java/com/iridium/iridiumteams/database/types/XEntityTypeType.java new file mode 100644 index 00000000..205d1fd0 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/types/XEntityTypeType.java @@ -0,0 +1,36 @@ +package com.iridium.iridiumteams.database.types; + +import com.cryptomorin.xseries.XEntityType; +import com.j256.ormlite.field.FieldType; +import com.j256.ormlite.field.SqlType; +import com.j256.ormlite.field.types.StringType; + +import java.sql.SQLException; +import java.util.Optional; + +public class XEntityTypeType extends StringType { + + private static final XEntityTypeType instance = new XEntityTypeType(); + + public static XEntityTypeType getSingleton() { + return instance; + } + + protected XEntityTypeType() { + super(SqlType.STRING, new Class[] { XEntityType.class }); + } + + @Override + public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException { + String value = (String) super.sqlArgToJava(fieldType, sqlArg, columnPos); + Optional entity = XEntityType.of(value); + return entity.orElse(null); + } + + @Override + public Object javaToSqlArg(FieldType fieldType, Object object) throws SQLException { + XEntityType entityType = (XEntityType) object; + return super.javaToSqlArg(fieldType, entityType.toString()); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/database/types/XMaterialType.java b/src/main/java/com/iridium/iridiumteams/database/types/XMaterialType.java index d8b83f1b..e02c92bb 100644 --- a/src/main/java/com/iridium/iridiumteams/database/types/XMaterialType.java +++ b/src/main/java/com/iridium/iridiumteams/database/types/XMaterialType.java @@ -1,6 +1,6 @@ package com.iridium.iridiumteams.database.types; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.cryptomorin.xseries.XMaterial; import com.j256.ormlite.field.FieldType; import com.j256.ormlite.field.SqlType; import com.j256.ormlite.field.types.StringType; diff --git a/src/main/java/com/iridium/iridiumteams/database/types/XPotionType.java b/src/main/java/com/iridium/iridiumteams/database/types/XPotionType.java new file mode 100644 index 00000000..02a4fdd0 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/database/types/XPotionType.java @@ -0,0 +1,36 @@ +package com.iridium.iridiumteams.database.types; + +import com.cryptomorin.xseries.XPotion; +import com.j256.ormlite.field.FieldType; +import com.j256.ormlite.field.SqlType; +import com.j256.ormlite.field.types.StringType; + +import java.sql.SQLException; +import java.util.Optional; + +public class XPotionType extends StringType { + + private static final XPotionType instance = new XPotionType(); + + public static XPotionType getSingleton() { + return instance; + } + + protected XPotionType() { + super(SqlType.STRING, new Class[] { XPotion.class }); + } + + @Override + public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException { + String value = (String) super.sqlArgToJava(fieldType, sqlArg, columnPos); + Optional potion = XPotion.of(value); + return potion.orElse(null); + } + + @Override + public Object javaToSqlArg(FieldType fieldType, Object object) throws SQLException { + XPotion potion = (XPotion) object; + return super.javaToSqlArg(fieldType, potion.toString()); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/enhancements/EnhancementData.java b/src/main/java/com/iridium/iridiumteams/enhancements/EnhancementData.java index 4da7a18e..ceff0ed3 100755 --- a/src/main/java/com/iridium/iridiumteams/enhancements/EnhancementData.java +++ b/src/main/java/com/iridium/iridiumteams/enhancements/EnhancementData.java @@ -1,6 +1,6 @@ package com.iridium.iridiumteams.enhancements; -import com.iridium.iridiumcore.dependencies.fasterxml.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.iridium.iridiumcore.utils.Placeholder; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/iridium/iridiumteams/enhancements/FarmingEnhancementData.java b/src/main/java/com/iridium/iridiumteams/enhancements/FarmingEnhancementData.java index f5d06730..5e47cf34 100755 --- a/src/main/java/com/iridium/iridiumteams/enhancements/FarmingEnhancementData.java +++ b/src/main/java/com/iridium/iridiumteams/enhancements/FarmingEnhancementData.java @@ -6,9 +6,9 @@ @NoArgsConstructor public class FarmingEnhancementData extends EnhancementData { - public double farmingModifier; + public int farmingModifier; - public FarmingEnhancementData(int minLevel, int money, Map bankCosts, double farmingModifier) { + public FarmingEnhancementData(int minLevel, int money, Map bankCosts, int farmingModifier) { super(minLevel, money, bankCosts); this.farmingModifier = farmingModifier; } diff --git a/src/main/java/com/iridium/iridiumteams/enhancements/MembersEnhancementData.java b/src/main/java/com/iridium/iridiumteams/enhancements/MembersEnhancementData.java new file mode 100755 index 00000000..4034320d --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/enhancements/MembersEnhancementData.java @@ -0,0 +1,25 @@ +package com.iridium.iridiumteams.enhancements; + +import com.iridium.iridiumcore.utils.Placeholder; +import lombok.NoArgsConstructor; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@NoArgsConstructor +public class MembersEnhancementData extends EnhancementData { + public int members; + + public MembersEnhancementData(int minLevel, int money, Map bankCosts, int members) { + super(minLevel, money, bankCosts); + this.members = members; + } + + @Override + public List getPlaceholders() { + return Arrays.asList( + new Placeholder("members", String.valueOf(members)) + ); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/enhancements/PotionEnhancementData.java b/src/main/java/com/iridium/iridiumteams/enhancements/PotionEnhancementData.java index b264953f..46cfd901 100755 --- a/src/main/java/com/iridium/iridiumteams/enhancements/PotionEnhancementData.java +++ b/src/main/java/com/iridium/iridiumteams/enhancements/PotionEnhancementData.java @@ -1,6 +1,6 @@ package com.iridium.iridiumteams.enhancements; -import com.iridium.iridiumcore.dependencies.xseries.XPotion; +import com.cryptomorin.xseries.XPotion; import lombok.NoArgsConstructor; import java.util.List; diff --git a/src/main/java/com/iridium/iridiumteams/enhancements/SpawnerEnhancementData.java b/src/main/java/com/iridium/iridiumteams/enhancements/SpawnerEnhancementData.java index 8dc85863..b8c33b03 100755 --- a/src/main/java/com/iridium/iridiumteams/enhancements/SpawnerEnhancementData.java +++ b/src/main/java/com/iridium/iridiumteams/enhancements/SpawnerEnhancementData.java @@ -7,9 +7,13 @@ @NoArgsConstructor public class SpawnerEnhancementData extends EnhancementData { public int spawnCount; + public int spawnMultiplier; + public int spawnDelay; - public SpawnerEnhancementData(int minLevel, int money, Map bankCosts, int spawnCount) { + public SpawnerEnhancementData(int minLevel, int money, Map bankCosts, int spawnCount, int spawnMultiplier, int spawnDelay) { super(minLevel, money, bankCosts); this.spawnCount = spawnCount; + this.spawnMultiplier = spawnMultiplier; + this.spawnDelay = spawnDelay; } } diff --git a/src/main/java/com/iridium/iridiumteams/enhancements/WarpsEnhancementData.java b/src/main/java/com/iridium/iridiumteams/enhancements/WarpsEnhancementData.java new file mode 100755 index 00000000..f78e5a40 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/enhancements/WarpsEnhancementData.java @@ -0,0 +1,25 @@ +package com.iridium.iridiumteams.enhancements; + +import com.iridium.iridiumcore.utils.Placeholder; +import lombok.NoArgsConstructor; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@NoArgsConstructor +public class WarpsEnhancementData extends EnhancementData { + public int warps; + + public WarpsEnhancementData(int minLevel, int money, Map bankCosts, int warps) { + super(minLevel, money, bankCosts); + this.warps = warps; + } + + @Override + public List getPlaceholders() { + return Arrays.asList( + new Placeholder("warps", String.valueOf(warps)) + ); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/BankGUI.java b/src/main/java/com/iridium/iridiumteams/gui/BankGUI.java index 06dbb99a..ca1fa9f1 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/BankGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/BankGUI.java @@ -11,7 +11,7 @@ import com.iridium.iridiumteams.database.Team; import com.iridium.iridiumteams.database.TeamBank; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -24,8 +24,8 @@ public class BankGUI> extends BackGUI { private final T team; private final IridiumTeams iridiumTeams; - public BankGUI(T team, Inventory previousInventory, IridiumTeams iridiumTeams) { - super(iridiumTeams.getInventories().bankGUI.background, previousInventory, iridiumTeams.getInventories().backButton); + public BankGUI(T team, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().bankGUI.background, player, iridiumTeams.getInventories().backButton); this.team = team; this.iridiumTeams = iridiumTeams; } @@ -57,20 +57,19 @@ public void onInventoryClick(InventoryClickEvent event) { Optional bankItem = iridiumTeams.getBankItemList().stream().filter(item -> item.getItem().slot == event.getSlot()).findFirst(); if (!bankItem.isPresent()) return; - U user = iridiumTeams.getUserManager().getUser((OfflinePlayer) event.getWhoClicked()); switch (event.getClick()) { case LEFT: - iridiumTeams.getCommands().withdrawCommand.execute(user, team, new String[]{bankItem.get().getName(), String.valueOf(bankItem.get().getDefaultAmount())}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().withdrawCommand, new String[]{bankItem.get().getName(), String.valueOf(bankItem.get().getDefaultAmount())}); break; case RIGHT: - iridiumTeams.getCommands().depositCommand.execute(user, team, new String[]{bankItem.get().getName(), String.valueOf(bankItem.get().getDefaultAmount())}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().depositCommand, new String[]{bankItem.get().getName(), String.valueOf(bankItem.get().getDefaultAmount())}); break; case SHIFT_LEFT: - iridiumTeams.getCommands().withdrawCommand.execute(user, team, new String[]{bankItem.get().getName(), String.valueOf(Double.MAX_VALUE)}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().withdrawCommand, new String[]{bankItem.get().getName(), String.valueOf(Double.MAX_VALUE)}); break; case SHIFT_RIGHT: - iridiumTeams.getCommands().depositCommand.execute(user, team, new String[]{bankItem.get().getName(), String.valueOf(Double.MAX_VALUE)}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().depositCommand, new String[]{bankItem.get().getName(), String.valueOf(Double.MAX_VALUE)}); break; } diff --git a/src/main/java/com/iridium/iridiumteams/gui/BlockValueGUI.java b/src/main/java/com/iridium/iridiumteams/gui/BlockValueGUI.java new file mode 100644 index 00000000..02ed2c76 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/BlockValueGUI.java @@ -0,0 +1,87 @@ +package com.iridium.iridiumteams.gui; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.gui.PagedGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.BlockValues; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class BlockValueGUI> extends PagedGUI { + + private final T team; + private final IridiumTeams iridiumTeams; + + public BlockValueGUI(T team, Player player, IridiumTeams iridiumTeams) { + super( + 1, + iridiumTeams.getInventories().blockValueGUI.size, + iridiumTeams.getInventories().blockValueGUI.background, + iridiumTeams.getInventories().previousPage, + iridiumTeams.getInventories().nextPage, + player, + iridiumTeams.getInventories().backButton + ); + this.team = team; + this.iridiumTeams = iridiumTeams; + } + + @NotNull + @Override + public Inventory getInventory() { + int maxPages = getPageObjects().size() / (getSize() - 9); + if (getPageObjects().size() % (getSize() - 9) > 0) maxPages++; + + NoItemGUI noItemGUI = iridiumTeams.getInventories().blockValueGUI; + Inventory inventory = Bukkit.createInventory(this, getSize(), StringUtils.color(noItemGUI.title + .replace("%page%", String.valueOf(getPage())) + .replace("%max_pages%", String.valueOf(maxPages)) + )); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + for (Map.Entry entry : iridiumTeams.getBlockValues().blockValues.entrySet().stream().filter(entry -> entry.getValue().page == getPage()).collect(Collectors.toList())) { + + List lore = new ArrayList<>(); + lore.add(iridiumTeams.getBlockValues().valueLore + .replace("%block_value%", String.valueOf(entry.getValue().value)) + ); + lore.add(iridiumTeams.getBlockValues().teamValueLore + .replace("%total_blocks%", String.valueOf(iridiumTeams.getTeamManager().getTeamBlock(team, entry.getKey()).getAmount())) + .replace("%total_block_value%", String.valueOf(iridiumTeams.getTeamManager().getTeamBlock(team, entry.getKey()).getAmount() * entry.getValue().value)) + ); + + inventory.setItem(entry.getValue().slot, ItemStackUtils.makeItem(entry.getKey(), 1, entry.getValue().name, lore)); + } + } + + @Override + public Collection getPageObjects() { + return iridiumTeams.getBlockValues().blockValues.values(); + } + + @Override + public ItemStack getItemStack(BlockValues.ValuableBlock valuableBlock) { + return null; + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/BlockValuesTypeSelectorGUI.java b/src/main/java/com/iridium/iridiumteams/gui/BlockValuesTypeSelectorGUI.java new file mode 100644 index 00000000..2f0bf32a --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/BlockValuesTypeSelectorGUI.java @@ -0,0 +1,64 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.BackGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.inventories.BlockValuesTypeSelectorInventoryConfig; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; + +public class BlockValuesTypeSelectorGUI> extends BackGUI { + + private final IridiumTeams iridiumTeams; + private final String teamArg; + + public BlockValuesTypeSelectorGUI(String teamArg, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().blockValuesTypeSelectorGUI.background, player, iridiumTeams.getInventories().backButton); + this.iridiumTeams = iridiumTeams; + this.teamArg = teamArg; + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().blockValuesTypeSelectorGUI; + Inventory inventory = Bukkit.createInventory(this, noItemGUI.size, StringUtils.color(noItemGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + BlockValuesTypeSelectorInventoryConfig blockValuesTypeSelectorInventoryConfig = iridiumTeams.getInventories().blockValuesTypeSelectorGUI; + if (blockValuesTypeSelectorInventoryConfig.blocks.enabled) { + inventory.setItem(blockValuesTypeSelectorInventoryConfig.blocks.item.slot, ItemStackUtils.makeItem(blockValuesTypeSelectorInventoryConfig.blocks.item)); + } + + if (blockValuesTypeSelectorInventoryConfig.spawners.enabled) { + inventory.setItem(blockValuesTypeSelectorInventoryConfig.spawners.item.slot, ItemStackUtils.makeItem(blockValuesTypeSelectorInventoryConfig.spawners.item)); + } + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + super.onInventoryClick(event); + BlockValuesTypeSelectorInventoryConfig blockValuesTypeSelectorInventoryConfig = iridiumTeams.getInventories().blockValuesTypeSelectorGUI; + + if (event.getSlot() == blockValuesTypeSelectorInventoryConfig.blocks.item.slot && blockValuesTypeSelectorInventoryConfig.blocks.enabled) { + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().blockValueCommand, new String[]{"blocks", teamArg}); + } + + if (event.getSlot() == blockValuesTypeSelectorInventoryConfig.spawners.item.slot && blockValuesTypeSelectorInventoryConfig.spawners.enabled) { + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().blockValueCommand, new String[]{"spawners", teamArg}); + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/BoostersGUI.java b/src/main/java/com/iridium/iridiumteams/gui/BoostersGUI.java index 2e86af5c..f2d2784e 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/BoostersGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/BoostersGUI.java @@ -13,14 +13,12 @@ import com.iridium.iridiumteams.enhancements.EnhancementData; import com.iridium.iridiumteams.enhancements.EnhancementType; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class BoostersGUI> extends BackGUI { @@ -28,8 +26,8 @@ public class BoostersGUI> extends BackG private final IridiumTeams iridiumTeams; private final Map boosters = new HashMap<>(); - public BoostersGUI(T team, Inventory previousInventory, IridiumTeams iridiumTeams) { - super(iridiumTeams.getInventories().boostersGUI.background, previousInventory, iridiumTeams.getInventories().backButton); + public BoostersGUI(T team, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().boostersGUI.background, player, iridiumTeams.getInventories().backButton); this.team = team; this.iridiumTeams = iridiumTeams; } @@ -51,22 +49,34 @@ public void addContent(Inventory inventory) { if (enhancementEntry.getValue().type != EnhancementType.BOOSTER) continue; boosters.put(enhancementEntry.getValue().item.slot, enhancementEntry.getKey()); TeamEnhancement teamEnhancement = iridiumTeams.getTeamManager().getTeamEnhancement(team, enhancementEntry.getKey()); + EnhancementData currentData = enhancementEntry.getValue().levels.get(teamEnhancement.getLevel()); EnhancementData nextData = enhancementEntry.getValue().levels.get(teamEnhancement.getLevel() + 1); int seconds = Math.max((int) (teamEnhancement.getRemainingTime() % 60), 0); int minutes = Math.max((int) ((teamEnhancement.getRemainingTime() % 3600) / 60), 0); int hours = Math.max((int) (teamEnhancement.getRemainingTime() / 3600), 0); int currentLevel = teamEnhancement.isActive(enhancementEntry.getValue().type) ? teamEnhancement.getLevel() : 0; - String nextLevel = nextData == null ? "N/A" : String.valueOf(currentLevel + 1); - String cost = nextData == null ? "N/A" : String.valueOf(nextData.money); - inventory.setItem(enhancementEntry.getValue().item.slot, ItemStackUtils.makeItem(enhancementEntry.getValue().item, Arrays.asList( + String nextLevel = nextData == null ? iridiumTeams.getMessages().nullPlaceholder : String.valueOf(currentLevel + 1); + String cost = nextData == null ? currentData == null ? iridiumTeams.getMessages().nullPlaceholder : String.valueOf(currentData.money) : String.valueOf(nextData.money); + String minLevel = nextData == null ? iridiumTeams.getMessages().nullPlaceholder : String.valueOf(nextData.minLevel); + List placeholders = currentData == null ? new ArrayList<>() : new ArrayList<>(currentData.getPlaceholders()); + placeholders.addAll(Arrays.asList( new Placeholder("timeremaining_hours", String.valueOf(hours)), new Placeholder("timeremaining_minutes", String.valueOf(minutes)), new Placeholder("timeremaining_seconds", String.valueOf(seconds)), new Placeholder("current_level", String.valueOf(currentLevel)), + new Placeholder("minLevel", minLevel), new Placeholder("next_level", nextLevel), - new Placeholder("cost", cost) + new Placeholder("cost", cost), + new Placeholder("vault_cost", cost) + )); - ))); + if(nextData != null) { + for (Map.Entry bankItem : nextData.bankCosts.entrySet()) { + placeholders.add(new Placeholder(bankItem.getKey() + "_cost", formatPrice(bankItem.getValue()))); + } + } + + inventory.setItem(enhancementEntry.getValue().item.slot, ItemStackUtils.makeItem(enhancementEntry.getValue().item, placeholders)); } } @@ -76,7 +86,13 @@ public void onInventoryClick(InventoryClickEvent event) { if (!boosters.containsKey(event.getSlot())) return; String booster = boosters.get(event.getSlot()); - U user = iridiumTeams.getUserManager().getUser((OfflinePlayer) event.getWhoClicked()); - iridiumTeams.getCommands().boostersCommand.execute(user, team, new String[]{"buy", booster}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().boostersCommand, new String[]{"buy", booster}); + } + + public String formatPrice(double value) { + if (iridiumTeams.getShop().abbreviatePrices) { + return iridiumTeams.getConfiguration().numberFormatter.format(value); + } + return String.valueOf(value); } } diff --git a/src/main/java/com/iridium/iridiumteams/gui/InventoryConfigGUI.java b/src/main/java/com/iridium/iridiumteams/gui/InventoryConfigGUI.java index 30ad41a7..da8fac53 100644 --- a/src/main/java/com/iridium/iridiumteams/gui/InventoryConfigGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/InventoryConfigGUI.java @@ -33,7 +33,11 @@ public Inventory getInventory() { public void addContent(Inventory inventory) { InventoryUtils.fillInventory(inventory, inventoryConfig.background); - inventoryConfig.items.values().forEach(item -> inventory.setItem(item.slot, ItemStackUtils.makeItem(item))); + inventoryConfig.items.values().forEach(item -> { + if(item.slot >= 0) { + inventory.setItem(item.slot, ItemStackUtils.makeItem(item)); + } + }); } @Override diff --git a/src/main/java/com/iridium/iridiumteams/gui/InvitesGUI.java b/src/main/java/com/iridium/iridiumteams/gui/InvitesGUI.java index e95d4350..90d5c480 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/InvitesGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/InvitesGUI.java @@ -2,6 +2,7 @@ import com.iridium.iridiumcore.gui.PagedGUI; import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.configs.inventories.NoItemGUI; @@ -9,13 +10,16 @@ import com.iridium.iridiumteams.database.Team; import com.iridium.iridiumteams.database.TeamInvite; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.Optional; public class InvitesGUI> extends PagedGUI { @@ -23,14 +27,14 @@ public class InvitesGUI> extends PagedG private final T team; private final IridiumTeams iridiumTeams; - public InvitesGUI(T team, Inventory previousInventory, IridiumTeams iridiumTeams) { + public InvitesGUI(T team, Player player, IridiumTeams iridiumTeams) { super( 1, iridiumTeams.getInventories().invitesGUI.size, iridiumTeams.getInventories().invitesGUI.background, iridiumTeams.getInventories().previousPage, iridiumTeams.getInventories().nextPage, - previousInventory, + player, iridiumTeams.getInventories().backButton ); this.team = team; @@ -54,7 +58,9 @@ public Collection getPageObjects() { @Override public ItemStack getItemStack(TeamInvite teamInvite) { Optional user = iridiumTeams.getUserManager().getUserByUUID(teamInvite.getUser()); - return ItemStackUtils.makeItem(iridiumTeams.getInventories().invitesGUI.item, iridiumTeams.getUserPlaceholderBuilder().getPlaceholders(user)); + List placeholderList = new ArrayList<>(iridiumTeams.getUserPlaceholderBuilder().getPlaceholders(user)); + placeholderList.add(new Placeholder("invite_time", teamInvite.getTime().format(DateTimeFormatter.ofPattern(iridiumTeams.getConfiguration().dateTimeFormat)))); + return ItemStackUtils.makeItem(iridiumTeams.getInventories().invitesGUI.item, placeholderList); } @Override @@ -64,7 +70,7 @@ public void onInventoryClick(InventoryClickEvent event) { TeamInvite teamInvite = getItem(event.getSlot()); if (teamInvite == null) return; - String username = iridiumTeams.getUserManager().getUserByUUID(teamInvite.getUser()).map(U::getName).orElse("N/A"); - iridiumTeams.getCommands().unInviteCommand.execute(iridiumTeams.getUserManager().getUser((OfflinePlayer) event.getWhoClicked()), team, new String[]{username}, iridiumTeams); + String username = iridiumTeams.getUserManager().getUserByUUID(teamInvite.getUser()).map(U::getName).orElse(iridiumTeams.getMessages().nullPlaceholder); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().unInviteCommand, new String[]{username}); } } diff --git a/src/main/java/com/iridium/iridiumteams/gui/MembersGUI.java b/src/main/java/com/iridium/iridiumteams/gui/MembersGUI.java index bf69e4ae..d8ac7c86 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/MembersGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/MembersGUI.java @@ -8,7 +8,7 @@ import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -21,14 +21,14 @@ public class MembersGUI> extends PagedG private final IridiumTeams iridiumTeams; private final T team; - public MembersGUI(T team, Inventory previousInventory, IridiumTeams iridiumTeams) { + public MembersGUI(T team, Player player, IridiumTeams iridiumTeams) { super( 1, iridiumTeams.getInventories().membersGUI.size, iridiumTeams.getInventories().membersGUI.background, iridiumTeams.getInventories().previousPage, iridiumTeams.getInventories().nextPage, - previousInventory, + player, iridiumTeams.getInventories().backButton ); this.iridiumTeams = iridiumTeams; @@ -64,13 +64,13 @@ public void onInventoryClick(InventoryClickEvent event) { switch (event.getClick()) { case LEFT: if (user.getUserRank() != 1) { - iridiumTeams.getCommands().demoteCommand.execute(iridiumTeams.getUserManager().getUser((OfflinePlayer) event.getWhoClicked()), team, new String[]{user.getName()}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().demoteCommand, new String[]{user.getName()}); } else { - iridiumTeams.getCommands().kickCommand.execute(iridiumTeams.getUserManager().getUser((OfflinePlayer) event.getWhoClicked()), team, new String[]{user.getName()}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().kickCommand, new String[]{user.getName()}); } break; case RIGHT: - iridiumTeams.getCommands().promoteCommand.execute(iridiumTeams.getUserManager().getUser((OfflinePlayer) event.getWhoClicked()), team, new String[]{user.getName()}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().promoteCommand, new String[]{user.getName()}); break; } } diff --git a/src/main/java/com/iridium/iridiumteams/gui/MissionGUI.java b/src/main/java/com/iridium/iridiumteams/gui/MissionGUI.java new file mode 100755 index 00000000..362d0a39 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/MissionGUI.java @@ -0,0 +1,103 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.BackGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamMission; +import com.iridium.iridiumteams.missions.Mission; +import com.iridium.iridiumteams.missions.MissionData; +import com.iridium.iridiumteams.missions.MissionType; +import lombok.Getter; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class MissionGUI> extends BackGUI { + + private final T team; + @Getter + private final MissionType missionType; + private final IridiumTeams iridiumTeams; + + public MissionGUI(T team, MissionType missionType, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().missionGUI.get(missionType).background, player, iridiumTeams.getInventories().backButton); + this.team = team; + this.missionType = missionType; + this.iridiumTeams = iridiumTeams; + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().missionGUI.get(missionType); + Inventory inventory = Bukkit.createInventory(this, noItemGUI.size, StringUtils.color(noItemGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + List teamMissions = iridiumTeams.getTeamManager().getTeamMissions(team); + + // Deals where slot is not null + for (Map.Entry entry : iridiumTeams.getMissions().missions.entrySet()) { + if (entry.getValue().getMissionType() != missionType) continue; + Optional teamMission = teamMissions.stream().filter(m -> m.getMissionName().equals(entry.getKey())).findFirst(); + int level = teamMission.map(TeamMission::getMissionLevel).orElse(1); + if(teamMission.isPresent() && teamMission.get().hasExpired()){ + iridiumTeams.getTeamManager().deleteTeamMission(teamMission.get()); + iridiumTeams.getTeamManager().deleteTeamMissionData(teamMission.get()); + level = 1; + } + MissionData missionData = entry.getValue().getMissionData().get(level); + if (missionData.getItem().slot == null) continue; + inventory.setItem(missionData.getItem().slot, getItem(entry.getKey())); + } + + // Deals where slot is null, to randomly pick a few missions + List missions = iridiumTeams.getTeamManager().getTeamMission(team, missionType); + int index = 0; + for (String missionName : missions) { + if (iridiumTeams.getMissions().dailySlots.size() <= index) continue; + int slot = iridiumTeams.getMissions().dailySlots.get(index); + inventory.setItem(slot, getItem(missionName)); + index++; + } + } + + private ItemStack getItem(String missionName) { + // This will create the mission if it doesnt exist + TeamMission teamMission = iridiumTeams.getTeamManager().getTeamMission(team, missionName); + Mission mission = iridiumTeams.getMissions().missions.get(missionName); + MissionData missionData = mission.getMissionData().get(teamMission.getMissionLevel()); + + List placeholders = IntStream.range(0, missionData.getMissions().size()) + .boxed() + .map(integer -> iridiumTeams.getTeamManager().getTeamMissionData(teamMission, integer)) + .map(islandMission -> new Placeholder("progress_" + (islandMission.getMissionIndex() + 1), String.valueOf(islandMission.getProgress()))) + .collect(Collectors.toList()); + + int seconds = Math.max((int) (teamMission.getRemainingTime() % 60), 0); + int minutes = Math.max((int) ((teamMission.getRemainingTime() % 3600) / 60), 0); + int hours = Math.max((int) (teamMission.getRemainingTime() / 3600), 0); + placeholders.add(new Placeholder("timeremaining_hours", String.valueOf(hours))); + placeholders.add(new Placeholder("timeremaining_minutes", String.valueOf(minutes))); + placeholders.add(new Placeholder("timeremaining_seconds", String.valueOf(seconds))); + return ItemStackUtils.makeItem(missionData.getItem(), placeholders); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/MissionTypeSelectorGUI.java b/src/main/java/com/iridium/iridiumteams/gui/MissionTypeSelectorGUI.java new file mode 100755 index 00000000..6aef34aa --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/MissionTypeSelectorGUI.java @@ -0,0 +1,79 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.BackGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.inventories.MissionTypeSelectorInventoryConfig; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; + +public class MissionTypeSelectorGUI> extends BackGUI { + + private final IridiumTeams iridiumTeams; + + public MissionTypeSelectorGUI(Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().missionTypeSelectorGUI.background, player, iridiumTeams.getInventories().backButton); + this.iridiumTeams = iridiumTeams; + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().missionTypeSelectorGUI; + Inventory inventory = Bukkit.createInventory(this, noItemGUI.size, StringUtils.color(noItemGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + + MissionTypeSelectorInventoryConfig missionTypeSelectorInventoryConfig = iridiumTeams.getInventories().missionTypeSelectorGUI; + if (missionTypeSelectorInventoryConfig.daily.enabled) { + inventory.setItem(missionTypeSelectorInventoryConfig.daily.item.slot, ItemStackUtils.makeItem(missionTypeSelectorInventoryConfig.daily.item)); + } + + if (missionTypeSelectorInventoryConfig.weekly.enabled) { + inventory.setItem(missionTypeSelectorInventoryConfig.weekly.item.slot, ItemStackUtils.makeItem(missionTypeSelectorInventoryConfig.weekly.item)); + } + + if (missionTypeSelectorInventoryConfig.infinite.enabled) { + inventory.setItem(missionTypeSelectorInventoryConfig.infinite.item.slot, ItemStackUtils.makeItem(missionTypeSelectorInventoryConfig.infinite.item)); + } + + if (missionTypeSelectorInventoryConfig.once.enabled) { + inventory.setItem(missionTypeSelectorInventoryConfig.once.item.slot, ItemStackUtils.makeItem(missionTypeSelectorInventoryConfig.once.item)); + } + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + super.onInventoryClick(event); + MissionTypeSelectorInventoryConfig missionTypeSelectorInventoryConfig = iridiumTeams.getInventories().missionTypeSelectorGUI; + + if (event.getSlot() == missionTypeSelectorInventoryConfig.daily.item.slot && missionTypeSelectorInventoryConfig.daily.enabled) { + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().missionsCommand, new String[]{"Daily"}); + } + + if (event.getSlot() == missionTypeSelectorInventoryConfig.weekly.item.slot && missionTypeSelectorInventoryConfig.weekly.enabled) { + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().missionsCommand, new String[]{"Weekly"}); + } + + if (event.getSlot() == missionTypeSelectorInventoryConfig.infinite.item.slot && missionTypeSelectorInventoryConfig.infinite.enabled) { + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().missionsCommand, new String[]{"Infinite"}); + } + + if (event.getSlot() == missionTypeSelectorInventoryConfig.once.item.slot && missionTypeSelectorInventoryConfig.once.enabled) { + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().missionsCommand, new String[]{"Once"}); + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/PermissionsGUI.java b/src/main/java/com/iridium/iridiumteams/gui/PermissionsGUI.java index b65f838f..0057265f 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/PermissionsGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/PermissionsGUI.java @@ -18,24 +18,25 @@ import java.util.Collections; import java.util.Map; -@Getter public class PermissionsGUI> extends BackGUI { private final IridiumTeams iridiumTeams; private final T team; + @Getter private final int rank; + @Getter private int page; - public PermissionsGUI(T team, int rank, Inventory previousInventory, IridiumTeams iridiumTeams) { - super(iridiumTeams.getInventories().permissionsGUI.background, previousInventory, iridiumTeams.getInventories().backButton); + public PermissionsGUI(T team, int rank, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().permissionsGUI.background, player, iridiumTeams.getInventories().backButton); this.iridiumTeams = iridiumTeams; this.team = team; this.rank = rank; this.page = 1; } - public PermissionsGUI(T team, int rank, int page, Inventory previousInventory, IridiumTeams iridiumTeams) { - super(iridiumTeams.getInventories().permissionsGUI.background, previousInventory, iridiumTeams.getInventories().backButton); + public PermissionsGUI(T team, int rank, int page, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().permissionsGUI.background, player, iridiumTeams.getInventories().backButton); this.iridiumTeams = iridiumTeams; this.team = team; @@ -84,8 +85,7 @@ public void onInventoryClick(InventoryClickEvent event) { if (permission.getValue().getItem().slot != event.getSlot()) continue; if (permission.getValue().getPage() != page) continue; - U user = iridiumTeams.getUserManager().getUser((Player) event.getWhoClicked()); - iridiumTeams.getCommands().setPermissionCommand.execute(user, team, new String[]{permission.getKey(), iridiumTeams.getUserRanks().get(rank).name}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().setPermissionCommand, new String[]{permission.getKey(), iridiumTeams.getUserRanks().get(rank).name}); return; } } diff --git a/src/main/java/com/iridium/iridiumteams/gui/RanksGUI.java b/src/main/java/com/iridium/iridiumteams/gui/RanksGUI.java index 358cef41..3e81de21 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/RanksGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/RanksGUI.java @@ -8,6 +8,7 @@ import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -19,8 +20,8 @@ public class RanksGUI> extends BackGUI private final IridiumTeams iridiumTeams; private final T team; - public RanksGUI(T team, Inventory previousInventory, IridiumTeams iridiumTeams) { - super(iridiumTeams.getInventories().ranksGUI.background, previousInventory, iridiumTeams.getInventories().backButton); + public RanksGUI(T team, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().ranksGUI.background, player, iridiumTeams.getInventories().backButton); this.team = team; this.iridiumTeams = iridiumTeams; } @@ -48,7 +49,7 @@ public void onInventoryClick(InventoryClickEvent event) { for (Map.Entry userRank : iridiumTeams.getUserRanks().entrySet()) { if (event.getSlot() != userRank.getValue().item.slot) continue; - event.getWhoClicked().openInventory(new PermissionsGUI<>(team, userRank.getKey(), event.getWhoClicked().getOpenInventory().getTopInventory(), iridiumTeams).getInventory()); + event.getWhoClicked().openInventory(new PermissionsGUI<>(team, userRank.getKey(), (Player) event.getWhoClicked(), iridiumTeams).getInventory()); return; } } diff --git a/src/main/java/com/iridium/iridiumteams/gui/RewardsGUI.java b/src/main/java/com/iridium/iridiumteams/gui/RewardsGUI.java new file mode 100755 index 00000000..8a56e4ef --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/RewardsGUI.java @@ -0,0 +1,86 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.Item; +import com.iridium.iridiumcore.gui.PagedGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamReward; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +public class RewardsGUI> extends PagedGUI { + + private final IridiumTeams iridiumTeams; + private final T team; + + public RewardsGUI(T team, Player player, IridiumTeams iridiumTeams) { + super( + 1, + iridiumTeams.getInventories().rewardsGUI.size, + iridiumTeams.getInventories().rewardsGUI.background, + iridiumTeams.getInventories().previousPage, + iridiumTeams.getInventories().nextPage, + player, + iridiumTeams.getInventories().backButton + ); + this.iridiumTeams = iridiumTeams; + this.team = team; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + Item item = iridiumTeams.getInventories().rewardsGUI.item; + inventory.setItem(item.slot, ItemStackUtils.makeItem(item)); + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().rewardsGUI; + Inventory inventory = Bukkit.createInventory(this, getSize(), StringUtils.color(noItemGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public Collection getPageObjects() { + return iridiumTeams.getTeamManager().getTeamRewards(team); + } + + @Override + public ItemStack getItemStack(TeamReward teamReward) { + return ItemStackUtils.makeItem(teamReward.getReward().item); + } + + @Override + public boolean isPaged() { + return true; + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + super.onInventoryClick(event); + + if(event.getSlot() == iridiumTeams.getInventories().rewardsGUI.item.slot){ + for(TeamReward teamReward : getPageObjects()){ + iridiumTeams.getTeamManager().claimTeamReward(teamReward, (Player) event.getWhoClicked()); + } + return; + } + + TeamReward teamReward = getItem(event.getSlot()); + if (teamReward == null) return; + iridiumTeams.getTeamManager().claimTeamReward(teamReward, (Player) event.getWhoClicked()); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/SettingsGUI.java b/src/main/java/com/iridium/iridiumteams/gui/SettingsGUI.java new file mode 100755 index 00000000..9106dd88 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/SettingsGUI.java @@ -0,0 +1,129 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.BackGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.Setting; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.Map; + +public class SettingsGUI> extends BackGUI { + + private final IridiumTeams iridiumTeams; + private final T team; + + public SettingsGUI(T team, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().settingsGUI.background, player, iridiumTeams.getInventories().backButton); + this.iridiumTeams = iridiumTeams; + this.team = team; + } + + @NotNull + @Override + public Inventory getInventory() { + Inventory inventory = Bukkit.createInventory(this, iridiumTeams.getInventories().settingsGUI.size, StringUtils.color(iridiumTeams.getInventories().settingsGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + for (Map.Entry setting : iridiumTeams.getSettingsList().entrySet()) { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, setting.getKey()); + if (teamSetting == null) continue; + + String teamSettingDisplay = teamSetting.getValue(); + switch(teamSetting.getValue()) { + case "Enabled": { + teamSettingDisplay = iridiumTeams.getMessages().enabledPlaceholder; + break; + } + case "Disabled": { + teamSettingDisplay = iridiumTeams.getMessages().disabledPlaceholder; + break; + } + case "Private": { + teamSettingDisplay = iridiumTeams.getMessages().privatePlaceholder; + break; + } + case "Public": { + teamSettingDisplay = iridiumTeams.getMessages().publicPlaceholder; + break; + } + case "Server": { + teamSettingDisplay = iridiumTeams.getMessages().serverPlaceholder; + break; + } + case "Sunny": { + teamSettingDisplay = iridiumTeams.getMessages().sunnyPlaceholder; + break; + } + case "Raining": { + teamSettingDisplay = iridiumTeams.getMessages().rainingPlaceholder; + break; + } + case "Sunrise": { + teamSettingDisplay = iridiumTeams.getMessages().sunrisePlaceholder; + break; + } + case "Day": { + teamSettingDisplay = iridiumTeams.getMessages().dayPlaceholder; + break; + } + case "Morning": { + teamSettingDisplay = iridiumTeams.getMessages().morningPlaceholder; + break; + } + case "Noon": { + teamSettingDisplay = iridiumTeams.getMessages().noonPlaceholder; + break; + } + case "Sunset": { + teamSettingDisplay = iridiumTeams.getMessages().sunsetPlaceholder; + break; + } + case "Night": { + teamSettingDisplay = iridiumTeams.getMessages().nightPlaceholder; + break; + } + case "Midnight": { + teamSettingDisplay = iridiumTeams.getMessages().midnightPlaceholder; + break; + } + } + + inventory.setItem(setting.getValue().getItem().slot, ItemStackUtils.makeItem(setting.getValue().getItem(), Collections.singletonList( + new Placeholder("value", teamSettingDisplay) + ))); + } + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + super.onInventoryClick(event); + + for (Map.Entry setting : iridiumTeams.getSettingsList().entrySet()) { + if (setting.getValue().getItem().slot != event.getSlot()) continue; + + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, setting.getKey()); + if (teamSetting == null) continue; + int currentIndex = setting.getValue().getValues().indexOf(teamSetting.getValue()); + String newValue = setting.getValue().getValues().get(setting.getValue().getValues().size() > currentIndex + 1 ? currentIndex + 1 : 0); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().settingsCommand, new String[]{setting.getValue().getDisplayName(), newValue}); + return; + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/ShopCategoryGUI.java b/src/main/java/com/iridium/iridiumteams/gui/ShopCategoryGUI.java new file mode 100644 index 00000000..f2231d06 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/ShopCategoryGUI.java @@ -0,0 +1,158 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.BackGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.Shop; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.Getter; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +public class ShopCategoryGUI> extends BackGUI { + private final IridiumTeams iridiumTeams; + @Getter + private final String categoryName; + private final Shop.ShopCategory shopCategory; + @Getter + private int page; + + public ShopCategoryGUI(String categoryName, Player player, int page, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().shopCategoryGUI.background, player, iridiumTeams.getInventories().backButton); + this.iridiumTeams = iridiumTeams; + this.categoryName = categoryName; + this.shopCategory = iridiumTeams.getShop().categories.get(categoryName); + this.page = page; + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().shopOverviewGUI; + Inventory inventory = Bukkit.createInventory(this, shopCategory.inventorySize, StringUtils.color(noItemGUI.title.replace("%category_name%", categoryName))); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + if (!iridiumTeams.getShop().items.containsKey(categoryName)) { + iridiumTeams.getLogger().warning("Shop Category " + categoryName + " Is not configured with any items!"); + return; + } + + for (Shop.ShopItem shopItem : iridiumTeams.getShop().items.get(categoryName)) { + if (shopItem.page != this.page) continue; + ItemStack itemStack = shopItem.type.parseItem(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + itemStack.setAmount(shopItem.defaultAmount); + itemMeta.setDisplayName(StringUtils.color(shopItem.name)); + itemMeta.setLore(getShopLore(shopItem)); + + itemStack.setItemMeta(itemMeta); + inventory.setItem(shopItem.slot, itemStack); + } + + inventory.setItem(inventory.getSize() - 3, ItemStackUtils.makeItem(this.iridiumTeams.getInventories().nextPage)); + inventory.setItem(inventory.getSize() - 7, ItemStackUtils.makeItem(this.iridiumTeams.getInventories().previousPage)); + } + + private List getShopLorePlaceholders(Shop.ShopItem item) { + List placeholders = new ArrayList<>(Arrays.asList( + new Placeholder("amount", iridiumTeams.getShopManager().formatPrice(item.defaultAmount)), + new Placeholder("vault_cost", iridiumTeams.getShopManager().formatPrice(item.buyCost.money)), + new Placeholder("vault_reward", iridiumTeams.getShopManager().formatPrice(item.sellCost.money)), + new Placeholder("minLevel", String.valueOf(item.minLevel)) + )); + for (Map.Entry bankItem : item.buyCost.bankItems.entrySet()) { + placeholders.add(new Placeholder(bankItem.getKey() + "_cost", iridiumTeams.getShopManager().formatPrice(bankItem.getValue()))); + } + for (Map.Entry bankItem : item.sellCost.bankItems.entrySet()) { + placeholders.add(new Placeholder(bankItem.getKey() + "_reward", iridiumTeams.getShopManager().formatPrice(bankItem.getValue()))); + } + return placeholders; + } + + private List getShopLore(Shop.ShopItem item) { + List lore = item.lore == null ? new ArrayList<>() : new ArrayList<>(StringUtils.color(item.lore)); + List placeholders = getShopLorePlaceholders(item); + + if (item.buyCost.canPurchase()) { + lore.add(iridiumTeams.getShop().buyPriceLore); + } else { + lore.add(iridiumTeams.getShop().notPurchasableLore); + } + + if(item.minLevel > 1) { + lore.add(iridiumTeams.getShop().levelRequirementLore); + } + + if (item.sellCost.canPurchase()) { + lore.add(iridiumTeams.getShop().sellRewardLore); + } else { + lore.add(iridiumTeams.getShop().notSellableLore); + } + + lore.addAll(iridiumTeams.getShop().shopItemLore); + + return StringUtils.color(StringUtils.processMultiplePlaceholders(lore, placeholders)); + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + super.onInventoryClick(event); + + if (event.getSlot() == event.getInventory().getSize() - 3 && doesNextPageExist()) { + this.page++; + addContent(event.getInventory()); + return; + } + + if (event.getSlot() == event.getInventory().getSize() - 7 && doesPreviousPageExist()) { + this.page--; + addContent(event.getInventory()); + return; + } + + Optional shopItem = iridiumTeams.getShop().items.get(categoryName).stream() + .filter(item -> item.slot == event.getSlot()) + .filter(item -> item.page == this.page) + .findAny(); + + if (!shopItem.isPresent()) { + return; + } + + Player player = (Player) event.getWhoClicked(); + int amount = event.isShiftClick() ? shopItem.get().type.parseItem().getMaxStackSize() : shopItem.get().defaultAmount; + if (event.isLeftClick() && shopItem.get().buyCost.canPurchase()) { + iridiumTeams.getShopManager().buy(player, shopItem.get(), amount); + } else if (event.isRightClick() && shopItem.get().sellCost.canPurchase()) { + iridiumTeams.getShopManager().sell(player, shopItem.get(), amount); + } else { + iridiumTeams.getShop().failSound.play(player); + } + } + + private boolean doesNextPageExist() { + return iridiumTeams.getShop().items.get(categoryName).stream().anyMatch(item -> item.page == this.page + 1); + } + + private boolean doesPreviousPageExist() { + return iridiumTeams.getShop().items.get(categoryName).stream().anyMatch(item -> item.page == this.page - 1); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/ShopOverviewGUI.java b/src/main/java/com/iridium/iridiumteams/gui/ShopOverviewGUI.java new file mode 100644 index 00000000..16362b77 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/ShopOverviewGUI.java @@ -0,0 +1,56 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.BackGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.Shop; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; + +public class ShopOverviewGUI> extends BackGUI { + private final IridiumTeams iridiumTeams; + + public ShopOverviewGUI(Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().shopOverviewGUI.background, player, iridiumTeams.getInventories().backButton); + this.iridiumTeams = iridiumTeams; + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().shopOverviewGUI; + Inventory inventory = Bukkit.createInventory(this, noItemGUI.size, StringUtils.color(noItemGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + for (Shop.ShopCategory category : iridiumTeams.getShop().categories.values()) { + inventory.setItem(category.item.slot, ItemStackUtils.makeItem(category.item)); + } + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + for (Map.Entry category : iridiumTeams.getShop().categories.entrySet()) { + if (event.getSlot() != category.getValue().item.slot) continue; + event.getWhoClicked().openInventory(new ShopCategoryGUI<>(category.getKey(), (Player) event.getWhoClicked(), 1, iridiumTeams).getInventory()); + return; + } + super.onInventoryClick(event); + } +} + + diff --git a/src/main/java/com/iridium/iridiumteams/gui/SpawnerValueGUI.java b/src/main/java/com/iridium/iridiumteams/gui/SpawnerValueGUI.java new file mode 100644 index 00000000..5922ef5c --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/SpawnerValueGUI.java @@ -0,0 +1,90 @@ +package com.iridium.iridiumteams.gui; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.gui.PagedGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.BlockValues; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Bukkit; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class SpawnerValueGUI> extends PagedGUI { + + private final T team; + private final IridiumTeams iridiumTeams; + + public SpawnerValueGUI(T team, Player player, IridiumTeams iridiumTeams) { + super( + 1, + iridiumTeams.getInventories().spawnerValueGUI.size, + iridiumTeams.getInventories().spawnerValueGUI.background, + iridiumTeams.getInventories().previousPage, + iridiumTeams.getInventories().nextPage, + player, + iridiumTeams.getInventories().backButton + ); + this.team = team; + this.iridiumTeams = iridiumTeams; + } + + @NotNull + @Override + public Inventory getInventory() { + int maxPages = getPageObjects().size() / (getSize() - 9); + if (getPageObjects().size() % (getSize() - 9) > 0) maxPages++; + + NoItemGUI noItemGUI = iridiumTeams.getInventories().spawnerValueGUI; + Inventory inventory = Bukkit.createInventory(this, getSize(), StringUtils.color(noItemGUI.title + .replace("%page%", String.valueOf(getPage())) + .replace("%max_pages%", String.valueOf(maxPages)) + )); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + for (Map.Entry entry : iridiumTeams.getBlockValues().spawnerValues.entrySet().stream().filter(entry -> entry.getValue().page == getPage()).collect(Collectors.toList())) { + + List lore = new ArrayList<>(); + lore.add(iridiumTeams.getBlockValues().valueLore + .replace("%block_value%", String.valueOf(entry.getValue().value)) + ); + lore.add(iridiumTeams.getBlockValues().teamValueLore + .replace("%total_blocks%", String.valueOf(iridiumTeams.getTeamManager().getTeamSpawners(team, entry.getKey()).getAmount())) + .replace("%total_block_value%", String.valueOf(iridiumTeams.getTeamManager().getTeamSpawners(team, entry.getKey()).getAmount() * entry.getValue().value)) + ); + + String itemName = entry.getKey().name().toUpperCase() + "_SPAWN_EGG"; + XMaterial item = XMaterial.matchXMaterial(itemName).orElse(XMaterial.SPAWNER); + + inventory.setItem(entry.getValue().slot, ItemStackUtils.makeItem(item, 1, entry.getValue().name, lore)); + } + } + + @Override + public Collection getPageObjects() { + return iridiumTeams.getBlockValues().spawnerValues.values(); + } + + @Override + public ItemStack getItemStack(BlockValues.ValuableBlock valuableBlock) { + return null; + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/TopGUI.java b/src/main/java/com/iridium/iridiumteams/gui/TopGUI.java index f07e66c9..1ba1590e 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/TopGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/TopGUI.java @@ -8,20 +8,29 @@ import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; import com.iridium.iridiumteams.sorting.TeamSorting; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; import java.util.List; +@Getter +@Setter public class TopGUI> extends BackGUI { private TeamSorting sortingType; + private int page = 1; + @Setter(AccessLevel.NONE) + @Getter(AccessLevel.NONE) private final IridiumTeams iridiumTeams; - public TopGUI(TeamSorting sortingType, Inventory previousInventory, IridiumTeams iridiumTeams) { - super(iridiumTeams.getInventories().topGUI.background, previousInventory, iridiumTeams.getInventories().backButton); + public TopGUI(TeamSorting sortingType, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().topGUI.background, player, iridiumTeams.getInventories().backButton); this.sortingType = sortingType; this.iridiumTeams = iridiumTeams; } @@ -39,12 +48,13 @@ public Inventory getInventory() { public void addContent(Inventory inventory) { super.addContent(inventory); - List teams = sortingType.getSortedTeams(iridiumTeams); + List teams = iridiumTeams.getTeamManager().getTeams(sortingType, true); for (int rank : iridiumTeams.getConfiguration().teamTopSlots.keySet()) { int slot = iridiumTeams.getConfiguration().teamTopSlots.get(rank); - if (teams.size() >= rank) { - T team = teams.get(rank - 1); + int actualRank = rank + (iridiumTeams.getConfiguration().teamTopSlots.size() * (page - 1)); + if (teams.size() >= actualRank) { + T team = teams.get(actualRank - 1); inventory.setItem(slot, ItemStackUtils.makeItem(iridiumTeams.getInventories().topGUI.item, iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(team))); } else { inventory.setItem(slot, ItemStackUtils.makeItem(iridiumTeams.getInventories().topGUI.filler)); @@ -63,6 +73,17 @@ public void addContent(Inventory inventory) { public void onInventoryClick(InventoryClickEvent event) { super.onInventoryClick(event); + if (event.getSlot() == iridiumTeams.getInventories().topGUI.size - 7 && page > 1) { + page--; + event.getWhoClicked().openInventory(getInventory()); + return; + } + + if (event.getSlot() == iridiumTeams.getInventories().topGUI.size - 3 && iridiumTeams.getTeamManager().getTeams().size() >= 1 + (iridiumTeams.getConfiguration().teamTopSlots.size() * page)) { + page++; + event.getWhoClicked().openInventory(getInventory()); + } + iridiumTeams.getSortingTypes().stream().filter(sorting -> sorting.item.slot == event.getSlot()).findFirst().ifPresent(sortingType -> { this.sortingType = sortingType; addContent(event.getInventory()); diff --git a/src/main/java/com/iridium/iridiumteams/gui/TrustsGUI.java b/src/main/java/com/iridium/iridiumteams/gui/TrustsGUI.java new file mode 100755 index 00000000..10e54312 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/TrustsGUI.java @@ -0,0 +1,78 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.PagedGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamTrust; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +public class TrustsGUI> extends PagedGUI { + + private final T team; + private final IridiumTeams iridiumTeams; + + public TrustsGUI(T team, Player player, IridiumTeams iridiumTeams) { + super( + 1, + iridiumTeams.getInventories().trustsGUI.size, + iridiumTeams.getInventories().trustsGUI.background, + iridiumTeams.getInventories().previousPage, + iridiumTeams.getInventories().nextPage, + player, + iridiumTeams.getInventories().backButton + ); + this.team = team; + this.iridiumTeams = iridiumTeams; + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().trustsGUI; + Inventory inventory = Bukkit.createInventory(this, getSize(), StringUtils.color(noItemGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public Collection getPageObjects() { + return iridiumTeams.getTeamManager().getTeamTrusts(team); + } + + @Override + public ItemStack getItemStack(TeamTrust teamTrust) { + Optional user = iridiumTeams.getUserManager().getUserByUUID(teamTrust.getUser()); + Optional truster = iridiumTeams.getUserManager().getUserByUUID(teamTrust.getTruster()); + List placeholderList = new ArrayList<>(iridiumTeams.getUserPlaceholderBuilder().getPlaceholders(user)); + placeholderList.add(new Placeholder("trusted_time", teamTrust.getTime().format(DateTimeFormatter.ofPattern(iridiumTeams.getConfiguration().dateTimeFormat)))); + placeholderList.add(new Placeholder("truster", truster.map(U::getName).orElse(iridiumTeams.getMessages().nullPlaceholder))); + return ItemStackUtils.makeItem(iridiumTeams.getInventories().trustsGUI.item, placeholderList); + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + super.onInventoryClick(event); + + TeamTrust teamTrust = getItem(event.getSlot()); + if (teamTrust == null) return; + + String username = iridiumTeams.getUserManager().getUserByUUID(teamTrust.getUser()).map(U::getName).orElse(iridiumTeams.getMessages().nullPlaceholder); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().unTrustCommand, new String[]{username}); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/gui/UpgradesGUI.java b/src/main/java/com/iridium/iridiumteams/gui/UpgradesGUI.java index 611b23dd..c6bc517a 100755 --- a/src/main/java/com/iridium/iridiumteams/gui/UpgradesGUI.java +++ b/src/main/java/com/iridium/iridiumteams/gui/UpgradesGUI.java @@ -13,14 +13,12 @@ import com.iridium.iridiumteams.enhancements.EnhancementData; import com.iridium.iridiumteams.enhancements.EnhancementType; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class UpgradesGUI> extends BackGUI { @@ -28,8 +26,8 @@ public class UpgradesGUI> extends BackG private final IridiumTeams iridiumTeams; private final Map upgrades = new HashMap<>(); - public UpgradesGUI(T team, Inventory previousInventory, IridiumTeams iridiumTeams) { - super(iridiumTeams.getInventories().upgradesGUI.background, previousInventory, iridiumTeams.getInventories().backButton); + public UpgradesGUI(T team, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().upgradesGUI.background, player, iridiumTeams.getInventories().backButton); this.team = team; this.iridiumTeams = iridiumTeams; } @@ -52,31 +50,49 @@ public void addContent(Inventory inventory) { if (enhancementEntry.getValue().type != EnhancementType.UPGRADE) continue; upgrades.put(enhancementEntry.getValue().item.slot, enhancementEntry.getKey()); TeamEnhancement teamEnhancement = iridiumTeams.getTeamManager().getTeamEnhancement(team, enhancementEntry.getKey()); + EnhancementData currentData = enhancementEntry.getValue().levels.get(teamEnhancement.getLevel()); EnhancementData nextData = enhancementEntry.getValue().levels.get(teamEnhancement.getLevel() + 1); int seconds = Math.max((int) (teamEnhancement.getRemainingTime() % 60), 0); int minutes = Math.max((int) ((teamEnhancement.getRemainingTime() % 3600) / 60), 0); int hours = Math.max((int) (teamEnhancement.getRemainingTime() / 3600), 0); - String nextLevel = nextData == null ? "N/A" : String.valueOf(teamEnhancement.getLevel() + 1); - String cost = nextData == null ? "N/A" : String.valueOf(nextData.money); - inventory.setItem(enhancementEntry.getValue().item.slot, ItemStackUtils.makeItem(enhancementEntry.getValue().item, Arrays.asList( + String nextLevel = nextData == null ? iridiumTeams.getMessages().nullPlaceholder : String.valueOf(teamEnhancement.getLevel() + 1); + String cost = nextData == null ? iridiumTeams.getMessages().nullPlaceholder : String.valueOf(nextData.money); + String minLevel = nextData == null ? iridiumTeams.getMessages().nullPlaceholder : String.valueOf(nextData.minLevel); + List placeholders = currentData == null ? new ArrayList<>() : new ArrayList<>(currentData.getPlaceholders()); + placeholders.addAll(Arrays.asList( new Placeholder("timeremaining_hours", String.valueOf(hours)), new Placeholder("timeremaining_minutes", String.valueOf(minutes)), new Placeholder("timeremaining_seconds", String.valueOf(seconds)), new Placeholder("current_level", String.valueOf(teamEnhancement.getLevel())), + new Placeholder("minLevel", minLevel), new Placeholder("next_level", nextLevel), - new Placeholder("cost", cost) + new Placeholder("cost", cost), + new Placeholder("vault_cost", cost) + )); - ))); + if(nextData != null) { + for (Map.Entry bankItem : nextData.bankCosts.entrySet()) { + placeholders.add(new Placeholder(bankItem.getKey() + "_cost", formatPrice(bankItem.getValue()))); + } + } + + inventory.setItem(enhancementEntry.getValue().item.slot, ItemStackUtils.makeItem(enhancementEntry.getValue().item, placeholders)); } } @Override public void onInventoryClick(InventoryClickEvent event) { super.onInventoryClick(event); - + if (!upgrades.containsKey(event.getSlot())) return; String upgrade = upgrades.get(event.getSlot()); - U user = iridiumTeams.getUserManager().getUser((OfflinePlayer) event.getWhoClicked()); - iridiumTeams.getCommands().upgradesCommand.execute(user, team, new String[]{"buy", upgrade}, iridiumTeams); + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().upgradesCommand, new String[]{"buy", upgrade}); + } + + public String formatPrice(double value) { + if (iridiumTeams.getShop().abbreviatePrices) { + return iridiumTeams.getConfiguration().numberFormatter.format(value); + } + return String.valueOf(value); } } diff --git a/src/main/java/com/iridium/iridiumteams/gui/WarpsGUI.java b/src/main/java/com/iridium/iridiumteams/gui/WarpsGUI.java new file mode 100755 index 00000000..47084dbd --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/gui/WarpsGUI.java @@ -0,0 +1,85 @@ +package com.iridium.iridiumteams.gui; + +import com.iridium.iridiumcore.gui.BackGUI; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.configs.inventories.NoItemGUI; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamWarp; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +public class WarpsGUI> extends BackGUI { + + private final T team; + private final IridiumTeams iridiumTeams; + + public WarpsGUI(T team, Player player, IridiumTeams iridiumTeams) { + super(iridiumTeams.getInventories().warpsGUI.background, player, iridiumTeams.getInventories().backButton); + this.team = team; + this.iridiumTeams = iridiumTeams; + } + + @NotNull + @Override + public Inventory getInventory() { + NoItemGUI noItemGUI = iridiumTeams.getInventories().warpsGUI; + Inventory inventory = Bukkit.createInventory(this, noItemGUI.size, StringUtils.color(noItemGUI.title)); + addContent(inventory); + return inventory; + } + + @Override + public void addContent(Inventory inventory) { + super.addContent(inventory); + + AtomicInteger atomicInteger = new AtomicInteger(1); + List teamWarps = iridiumTeams.getTeamManager().getTeamWarps(team); + for (TeamWarp teamWarp : teamWarps) { + int slot = iridiumTeams.getConfiguration().teamWarpSlots.get(atomicInteger.getAndIncrement()); + ItemStack itemStack = ItemStackUtils.makeItem(iridiumTeams.getInventories().warpsGUI.item, Arrays.asList( + new Placeholder("island_name", team.getName()), + new Placeholder("warp_name", teamWarp.getName()), + new Placeholder("warp_description", teamWarp.getDescription() != null ? teamWarp.getDescription() : ""), + new Placeholder("warp_creator", Bukkit.getServer().getOfflinePlayer(teamWarp.getUser()).getName()), + new Placeholder("warp_create_time", teamWarp.getCreateTime().format(DateTimeFormatter.ofPattern(iridiumTeams.getConfiguration().dateTimeFormat))) + )); + Material material = teamWarp.getIcon().parseMaterial(); + if (material != null) itemStack.setType(material); + inventory.setItem(slot, itemStack); + } + } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + super.onInventoryClick(event); + + List teamWarps = iridiumTeams.getTeamManager().getTeamWarps(team); + for (Map.Entry entrySet : iridiumTeams.getConfiguration().teamWarpSlots.entrySet()) { + if (entrySet.getValue() != event.getSlot()) continue; + if (teamWarps.size() < entrySet.getKey()) continue; + TeamWarp teamWarp = teamWarps.get(entrySet.getKey() - 1); + switch (event.getClick()) { + case LEFT: + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().warpCommand, new String[]{teamWarp.getName()}); + return; + case RIGHT: + iridiumTeams.getCommandManager().executeCommand(event.getWhoClicked(), iridiumTeams.getCommands().deleteWarpCommand, new String[]{teamWarp.getName()}); + } + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockBreakListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockBreakListener.java index 80f97a17..e75e45da 100755 --- a/src/main/java/com/iridium/iridiumteams/listeners/BlockBreakListener.java +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockBreakListener.java @@ -1,6 +1,6 @@ package com.iridium.iridiumteams.listeners; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.PermissionType; @@ -26,21 +26,36 @@ public class BlockBreakListener> implem public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); U user = iridiumTeams.getUserManager().getUser(player); - Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()); + Optional team = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, event.getBlock().getLocation()); if (team.isPresent()) { - if (!iridiumTeams.getTeamManager().getTeamPermission(team.get(), user, PermissionType.BLOCK_BREAK)) { + + if (!(event.getBlock().getState() instanceof CreatureSpawner) && !iridiumTeams.getTeamManager().getTeamPermission(team.get(), user, PermissionType.BLOCK_BREAK)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotBreakBlocks .replace("%prefix%", iridiumTeams.getConfiguration().prefix) )); event.setCancelled(true); } + + if (event.getBlock().getState() instanceof CreatureSpawner && !iridiumTeams.getTeamManager().getTeamPermission(team.get(), user, PermissionType.SPAWNERS)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotBreakSpawners + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + } + + } else { + iridiumTeams.getTeamManager().handleBlockBreakOutsideTerritory(event); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void monitorBlockBreak(BlockBreakEvent event) { + U user = iridiumTeams.getUserManager().getUser(event.getPlayer()); XMaterial material = XMaterial.matchXMaterial(event.getBlock().getType()); - iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).ifPresent(team -> { + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getBlock().getLocation().getWorld(), "MINE", material.name(), 1); + }); + iridiumTeams.getTeamManager().getTeamViaPlayerLocation(event.getPlayer(), event.getBlock().getLocation()).ifPresent(team -> { TeamBlock teamBlock = iridiumTeams.getTeamManager().getTeamBlock(team, material); teamBlock.setAmount(Math.max(0, teamBlock.getAmount() - 1)); diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockBurnListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockBurnListener.java new file mode 100755 index 00000000..78949e53 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockBurnListener.java @@ -0,0 +1,29 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBurnEvent; + +@AllArgsConstructor +public class BlockBurnListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onBlockBurn(BlockBurnEvent event) { + + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, SettingType.FIRE_SPREAD.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled")) { + event.setCancelled(true); + } + }); + } + +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockExplodeListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockExplodeListener.java new file mode 100644 index 00000000..ca6d6231 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockExplodeListener.java @@ -0,0 +1,44 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockExplodeEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class BlockExplodeListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onBlockExplode(BlockExplodeEvent event) { + + if (!iridiumTeams.getConfiguration().preventTntGriefing) return; + Optional currentTeam = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()); + + if (currentTeam.isPresent()) { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(currentTeam.get(), SettingType.TNT_DAMAGE.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled")) { + event.setCancelled(true); + return; + } + } + + int currentTeamId = currentTeam.map(T::getId).orElse(0); + + event.blockList().removeIf(blockState -> { + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(blockState.getLocation()); + return team.map(T::getId).orElse(currentTeamId) != currentTeamId; + }); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockFertilizeListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockFertilizeListener.java new file mode 100644 index 00000000..7c9587e7 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockFertilizeListener.java @@ -0,0 +1,46 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockFertilizeEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class BlockFertilizeListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onBlockFertilize(BlockFertilizeEvent event) { + Player player = event.getPlayer(); + + Optional currentTeam = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()); + int currentTeamId = currentTeam.map(T::getId).orElse(0); + + if (player != null && currentTeam.isPresent()) { + U user = iridiumTeams.getUserManager().getUser(player); + if (!iridiumTeams.getTeamManager().getTeamPermission(currentTeam.get(), user, PermissionType.BLOCK_PLACE)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotBreakBlocks + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + return; + } + } + + event.getBlocks().removeIf(blockState -> { + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(blockState.getLocation()); + return team.map(T::getId).orElse(currentTeamId) != currentTeamId; + }); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockFormListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockFormListener.java new file mode 100755 index 00000000..f7dc1178 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockFormListener.java @@ -0,0 +1,30 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockFormEvent; + +@AllArgsConstructor +public class BlockFormListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onBlockForm(BlockFormEvent event) { + + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, SettingType.ICE_FORM.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled") && (event.getNewState().getType() == Material.ICE || event.getNewState().getType() == Material.SNOW)) { + event.setCancelled(true); + } + }); + } + +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockFromToListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockFromToListener.java new file mode 100755 index 00000000..e551e279 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockFromToListener.java @@ -0,0 +1,26 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockFromToEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class BlockFromToListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onBlockFromTo(BlockFromToEvent event) { + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(event.getToBlock().getLocation()); + int currentTeam = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation(), team).map(T::getId).orElse(0); + if (team.map(T::getId).orElse(currentTeam) != currentTeam) { + event.setCancelled(true); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockGrowListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockGrowListener.java new file mode 100644 index 00000000..8971756c --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockGrowListener.java @@ -0,0 +1,61 @@ +package com.iridium.iridiumteams.listeners; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamEnhancement; +import com.iridium.iridiumteams.enhancements.Enhancement; +import com.iridium.iridiumteams.enhancements.FarmingEnhancementData; +import lombok.AllArgsConstructor; +import org.bukkit.Effect; +import org.bukkit.block.data.Ageable; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockGrowEvent; +import org.bukkit.event.block.BlockSpreadEvent; + +import java.util.Arrays; +import java.util.List; + + +@AllArgsConstructor +public class BlockGrowListener> implements Listener { + private final IridiumTeams iridiumTeams; + private final List ageIgnoreList = Arrays.asList(XMaterial.SUGAR_CANE, XMaterial.CACTUS, XMaterial.BAMBOO, XMaterial.CAVE_VINES); + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorBlockGrow(BlockGrowEvent event) { + XMaterial material = XMaterial.matchXMaterial(event.getNewState().getType()); + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + if (event.getNewState().getBlockData() instanceof Ageable) { + Ageable ageable = (Ageable) event.getNewState().getBlockData(); + + if (ageable.getAge() >= ageable.getMaximumAge() || ageIgnoreList.contains(material)) { + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getBlock().getLocation().getWorld(), "GROW", material.name(), 1); + } + + Enhancement farmingEnhancement = iridiumTeams.getEnhancements().farmingEnhancement; + TeamEnhancement teamEnhancement = iridiumTeams.getTeamManager().getTeamEnhancement(team, "farming"); + FarmingEnhancementData data = farmingEnhancement.levels.get(teamEnhancement.getLevel()); + if (teamEnhancement.isActive(farmingEnhancement.type) && data != null) { + ageable.setAge(Math.min(ageable.getAge() + data.farmingModifier, ageable.getMaximumAge())); + event.getNewState().setBlockData(ageable); + event.getBlock().getWorld().playEffect(event.getBlock().getLocation(), Effect.BONE_MEAL_USE, 0); + } + + } else { + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getBlock().getLocation().getWorld(), "GROW", material.name(), 1); + } + }); + + } + + // Some stuff like bamboo growing comes under this for some reason + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorBlockSpread(BlockSpreadEvent event) { + monitorBlockGrow(event); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockPistonListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockPistonListener.java new file mode 100755 index 00000000..22e907bd --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockPistonListener.java @@ -0,0 +1,58 @@ +package com.iridium.iridiumteams.listeners; + +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockPistonRetractEvent; + +import java.util.Map; +import java.util.Optional; + +@AllArgsConstructor +public class BlockPistonListener> implements Listener { + private final IridiumTeams iridiumTeams; + + private static final Map offsets = ImmutableMap.builder() + .put(BlockFace.EAST, new int[]{1, 0, 0}) + .put(BlockFace.WEST, new int[]{-1, 0, 0}) + .put(BlockFace.UP, new int[]{0, 1, 0}) + .put(BlockFace.DOWN, new int[]{0, -1, 0}) + .put(BlockFace.SOUTH, new int[]{0, 0, 1}) + .put(BlockFace.NORTH, new int[]{0, 0, -1}) + .build(); + + @EventHandler(ignoreCancelled = true) + public void onBlockPistonExtend(BlockPistonExtendEvent event) { + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()); + int currentTeam = team.map(T::getId).orElse(0); + for (Block block : event.getBlocks()) { + int[] offset = offsets.get(event.getDirection()); + Optional newTeam = iridiumTeams.getTeamManager().getTeamViaLocation(block.getLocation().add(offset[0], offset[1], offset[2]), team); + if (newTeam.map(T::getId).orElse(0) != currentTeam) { + event.setCancelled(true); + return; + } + } + } + + @EventHandler(ignoreCancelled = true) + public void onBlockPistonRetract(BlockPistonRetractEvent event) { + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()); + int currentTeam = team.map(T::getId).orElse(0); + for (Block block : event.getBlocks()) { + Optional newTeam = iridiumTeams.getTeamManager().getTeamViaLocation(block.getLocation(), team); + if (newTeam.map(T::getId).orElse(0) != currentTeam) { + event.setCancelled(true); + return; + } + } + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockPlaceListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockPlaceListener.java index 1845cd78..536926bc 100755 --- a/src/main/java/com/iridium/iridiumteams/listeners/BlockPlaceListener.java +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockPlaceListener.java @@ -1,6 +1,6 @@ package com.iridium.iridiumteams.listeners; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.PermissionType; @@ -24,9 +24,15 @@ public class BlockPlaceListener> implem @EventHandler(ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { + if (iridiumTeams.getTeamManager().isBankItem(event.getItemInHand())) { + event.setCancelled(true); + return; + } + Player player = event.getPlayer(); U user = iridiumTeams.getUserManager().getUser(player); - Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()); + Optional team = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, event.getBlock().getLocation()); + if (team.isPresent()) { if (!iridiumTeams.getTeamManager().getTeamPermission(team.get(), user, PermissionType.BLOCK_PLACE)) { player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotPlaceBlocks @@ -34,18 +40,27 @@ public void onBlockPlace(BlockPlaceEvent event) { )); event.setCancelled(true); } + } else { + iridiumTeams.getTeamManager().handleBlockPlaceOutsideTerritory(event); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void monitorBlockPlace(BlockPlaceEvent event) { + U user = iridiumTeams.getUserManager().getUser(event.getPlayer()); XMaterial material = XMaterial.matchXMaterial(event.getBlock().getType()); - iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).ifPresent(team -> { + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getBlock().getLocation().getWorld(), "PLACE", material.name(), 1); + }); + iridiumTeams.getTeamManager().getTeamViaPlayerLocation(event.getPlayer(), event.getBlock().getLocation()).ifPresent(team -> { TeamBlock teamBlock = iridiumTeams.getTeamManager().getTeamBlock(team, material); teamBlock.setAmount(teamBlock.getAmount() + 1); if (event.getBlock().getState() instanceof CreatureSpawner) { CreatureSpawner creatureSpawner = (CreatureSpawner) event.getBlock().getState(); + + if(creatureSpawner.getSpawnedType() == null) return; + TeamSpawners teamSpawners = iridiumTeams.getTeamManager().getTeamSpawners(team, creatureSpawner.getSpawnedType()); teamSpawners.setAmount(teamSpawners.getAmount() + 1); } diff --git a/src/main/java/com/iridium/iridiumteams/listeners/BlockSpreadListener.java b/src/main/java/com/iridium/iridiumteams/listeners/BlockSpreadListener.java new file mode 100755 index 00000000..890f5d1f --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/BlockSpreadListener.java @@ -0,0 +1,36 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockSpreadEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class BlockSpreadListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onBlockSpread(BlockSpreadEvent event) { + int currentTeam = iridiumTeams.getTeamManager().getTeamViaLocation(event.getSource().getLocation()).map(T::getId).orElse(0); + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()); + if (team.map(T::getId).orElse(currentTeam) != currentTeam) { + event.setCancelled(true); + } + if(team.isPresent() && event.getSource().getType() == Material.FIRE){ + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team.get(), SettingType.FIRE_SPREAD.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled")) { + event.setCancelled(true); + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/listeners/EnchantItemListener.java b/src/main/java/com/iridium/iridiumteams/listeners/EnchantItemListener.java new file mode 100644 index 00000000..f72b7031 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/EnchantItemListener.java @@ -0,0 +1,28 @@ + +package com.iridium.iridiumteams.listeners; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.enchantment.EnchantItemEvent; + +@AllArgsConstructor +public class EnchantItemListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorItemEnchant(EnchantItemEvent event) { + U user = iridiumTeams.getUserManager().getUser(event.getEnchanter()); + XMaterial material = XMaterial.matchXMaterial(event.getItem().getType()); + iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).ifPresent(team -> { + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getEnchanter().getLocation().getWorld(), "ENCHANT", material.name(), 1); + }); + + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/EntityChangeBlockListener.java b/src/main/java/com/iridium/iridiumteams/listeners/EntityChangeBlockListener.java new file mode 100644 index 00000000..108f3e57 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/EntityChangeBlockListener.java @@ -0,0 +1,43 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityBreakDoorEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; + +@AllArgsConstructor +public class EntityChangeBlockListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onEntityChangeBlock(EntityChangeBlockEvent event) { + if (event.getEntityType() == EntityType.FALLING_BLOCK || event.getEntityType() == EntityType.PLAYER) return; + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, SettingType.ENTITY_GRIEF.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled")) { + event.setCancelled(true); + } + }); + } + + @EventHandler(ignoreCancelled = true) + public void onEntityBreakDoor(EntityBreakDoorEvent event) { + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, SettingType.ENTITY_GRIEF.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled")) { + event.setCancelled(true); + } + }); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/EntityDamageListener.java b/src/main/java/com/iridium/iridiumteams/listeners/EntityDamageListener.java new file mode 100755 index 00000000..5b0539bd --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/EntityDamageListener.java @@ -0,0 +1,37 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class EntityDamageListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onEntityDamage(EntityDamageByEntityEvent event) { + Entity damager = event.getDamager(); + if (!(damager instanceof Player)) return; + Player player = (Player) damager; + U user = iridiumTeams.getUserManager().getUser(player); + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(event.getEntity().getLocation()); + if (team.isPresent()) { + if (!iridiumTeams.getTeamManager().getTeamPermission(team.get(), user, PermissionType.KILL_MOBS)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotKillMobs + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + } + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/EntityDeathListener.java b/src/main/java/com/iridium/iridiumteams/listeners/EntityDeathListener.java new file mode 100644 index 00000000..c59cb150 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/EntityDeathListener.java @@ -0,0 +1,29 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; + +@AllArgsConstructor +public class EntityDeathListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorEntityDeath(EntityDeathEvent event) { + Player killer = event.getEntity().getKiller(); + if(killer==null)return; + U user = iridiumTeams.getUserManager().getUser(killer); + iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).ifPresent(team -> { + iridiumTeams.getMissionManager().handleMissionUpdate(team, killer.getLocation().getWorld(), "KILL", event.getEntityType().name(), 1); + }); + + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/EntityExplodeListener.java b/src/main/java/com/iridium/iridiumteams/listeners/EntityExplodeListener.java new file mode 100644 index 00000000..df89954a --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/EntityExplodeListener.java @@ -0,0 +1,50 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.metadata.MetadataValue; + +import java.util.List; +import java.util.Optional; + +@AllArgsConstructor +public class EntityExplodeListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onEntityExplode(EntityExplodeEvent event) { + if (!iridiumTeams.getConfiguration().preventTntGriefing) return; + List list = event.getEntity().getMetadata("team_spawned"); + Optional currentTeam = iridiumTeams.getTeamManager().getTeamViaLocation(event.getEntity().getLocation()); + + if (currentTeam.isPresent()) { + TeamSetting tntDisabled = iridiumTeams.getTeamManager().getTeamSetting(currentTeam.get(), SettingType.TNT_DAMAGE.getSettingKey()); + TeamSetting entityGriefDisabled = iridiumTeams.getTeamManager().getTeamSetting(currentTeam.get(), SettingType.ENTITY_GRIEF.getSettingKey()); + + if (tntDisabled == null && entityGriefDisabled == null) return; + boolean isTnTDisabled = tntDisabled != null && tntDisabled.getValue().equalsIgnoreCase("Disabled"); + boolean isEntityGriefDisabled = entityGriefDisabled != null && entityGriefDisabled.getValue().equalsIgnoreCase("Disabled"); + if (isTnTDisabled || isEntityGriefDisabled) { + event.setCancelled(true); + return; + } + } + + int originalTeamId = list.stream().map(MetadataValue::asInt).findFirst().orElse(0); + + event.blockList().removeIf(blockState -> { + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(blockState.getLocation()); + return team.map(T::getId).orElse(originalTeamId) != originalTeamId; + }); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/EntityInteractListener.java b/src/main/java/com/iridium/iridiumteams/listeners/EntityInteractListener.java new file mode 100644 index 00000000..e21eb2c2 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/EntityInteractListener.java @@ -0,0 +1,29 @@ + +package com.iridium.iridiumteams.listeners; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityInteractEvent; + +@AllArgsConstructor +public class EntityInteractListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onEntityInteract(EntityInteractEvent event) { + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, SettingType.CROP_TRAMPLE.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled") && (XMaterial.matchXMaterial(event.getBlock().getType()) == XMaterial.FARMLAND)) { + event.setCancelled(true); + } + }); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/EntitySpawnListener.java b/src/main/java/com/iridium/iridiumteams/listeners/EntitySpawnListener.java new file mode 100644 index 00000000..ce9821c0 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/EntitySpawnListener.java @@ -0,0 +1,38 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.metadata.FixedMetadataValue; + +import java.util.Optional; + +@AllArgsConstructor +public class EntitySpawnListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onEntitySpawn(EntitySpawnEvent event) { + Optional currentTeam = iridiumTeams.getTeamManager().getTeamViaLocation(event.getEntity().getLocation()); + if (currentTeam.isPresent()) { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(currentTeam.get(), SettingType.MOB_SPAWNING.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled") && event.getEntity() instanceof LivingEntity && event.getEntityType() != EntityType.ARMOR_STAND) { + event.setCancelled(true); + } + } + + event.getEntity().setMetadata("team_spawned", new FixedMetadataValue(iridiumTeams, currentTeam.map(T::getId).orElse(0))); + } + + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/FurnaceSmeltListener.java b/src/main/java/com/iridium/iridiumteams/listeners/FurnaceSmeltListener.java new file mode 100644 index 00000000..67948f36 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/FurnaceSmeltListener.java @@ -0,0 +1,28 @@ + +package com.iridium.iridiumteams.listeners; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.FurnaceSmeltEvent; + +@AllArgsConstructor +public class FurnaceSmeltListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorFurnaceSmelt(FurnaceSmeltEvent event) { + XMaterial material = XMaterial.matchXMaterial(event.getSource().getType()); + + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getBlock().getLocation().getWorld(), "SMELT", material.name(), 1); + }); + + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/InventoryCloseListener.java b/src/main/java/com/iridium/iridiumteams/listeners/InventoryCloseListener.java new file mode 100755 index 00000000..e5fe724c --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/InventoryCloseListener.java @@ -0,0 +1,16 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumcore.gui.ClosableGUI; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryCloseEvent; + +public class InventoryCloseListener implements Listener { + + @EventHandler(ignoreCancelled = true) + public void onInventoryClose(InventoryCloseEvent event) { + if (event.getInventory().getHolder() != null && event.getInventory().getHolder() instanceof ClosableGUI) { + ((ClosableGUI) event.getInventory().getHolder()).onInventoryClose(event); + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/LeavesDecayListener.java b/src/main/java/com/iridium/iridiumteams/listeners/LeavesDecayListener.java new file mode 100644 index 00000000..7117d6f8 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/LeavesDecayListener.java @@ -0,0 +1,27 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.LeavesDecayEvent; + +@AllArgsConstructor +public class LeavesDecayListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onLeavesDecay(LeavesDecayEvent event) { + iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + TeamSetting teamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, SettingType.LEAF_DECAY.getSettingKey()); + if (teamSetting == null) return; + if (teamSetting.getValue().equalsIgnoreCase("Disabled")) { + event.setCancelled(true); + } + }); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerBucketListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerBucketListener.java new file mode 100644 index 00000000..fed20077 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerBucketListener.java @@ -0,0 +1,48 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class PlayerBucketListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onBucketEmptyEvent(PlayerBucketEmptyEvent event) { + onBucketEvent(event); + } + + @EventHandler(ignoreCancelled = true) + public void onBucketFillEvent(PlayerBucketFillEvent event) { + onBucketEvent(event); + } + + public void onBucketEvent(PlayerBucketEvent event) { + Player player = event.getPlayer(); + U user = iridiumTeams.getUserManager().getUser(player); + Optional team = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, event.getBlock().getLocation()); + if (team.isPresent()) { + if (!iridiumTeams.getTeamManager().getTeamPermission(team.get(), user, PermissionType.BUCKET)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotUseBuckets + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + } + } + + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerChatListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerChatListener.java index 17324d76..71067d9e 100755 --- a/src/main/java/com/iridium/iridiumteams/listeners/PlayerChatListener.java +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerChatListener.java @@ -29,6 +29,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { List players = chatType.get().getPlayerChat().getPlayers(event.getPlayer().getPlayer()); if (players == null) return; for (Player player : players) { + if(player == null) return; player.sendMessage(StringUtils.color(StringUtils.processMultiplePlaceholders(iridiumTeams.getMessages().chatFormat, iridiumTeams.getTeamChatPlaceholderBuilder().getPlaceholders(event, player)))); } event.getRecipients().clear(); diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerCraftListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerCraftListener.java new file mode 100644 index 00000000..9d790cbf --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerCraftListener.java @@ -0,0 +1,51 @@ + +package com.iridium.iridiumteams.listeners; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.Objects; + +@AllArgsConstructor +public class PlayerCraftListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorPlayerCraft(CraftItemEvent event) { + int amount = event.isShiftClick() ? Arrays.stream(event.getInventory().getMatrix()) + .filter(Objects::nonNull) + .map(ItemStack::getAmount) + .sorted() + .findFirst() + .orElse(1) * event.getRecipe().getResult().getAmount() : event.getRecipe().getResult().getAmount(); + + Player player = (Player) event.getWhoClicked(); + U user = iridiumTeams.getUserManager().getUser(player); + XMaterial material = XMaterial.matchXMaterial(event.getRecipe().getResult().getType()); + + iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).ifPresent(team -> { + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getWhoClicked().getLocation().getWorld(), "CRAFT", material.name(), amount); + }); + } + + @EventHandler(ignoreCancelled = true) + public void onPlayerCraft(PrepareItemCraftEvent event) { + for (ItemStack item : event.getInventory().getMatrix()) { + if (iridiumTeams.getTeamManager().isBankItem(item)) { + event.getInventory().setResult(null); + return; + } + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerFishListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerFishListener.java new file mode 100644 index 00000000..d348ee34 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerFishListener.java @@ -0,0 +1,31 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerFishEvent; + +@AllArgsConstructor +public class PlayerFishListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorPlayerFish(PlayerFishEvent event) { + Entity caughtEntity = event.getCaught(); + if (caughtEntity == null || event.getState() != PlayerFishEvent.State.CAUGHT_FISH) return; + U user = iridiumTeams.getUserManager().getUser(event.getPlayer()); + + iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).ifPresent(team -> { + iridiumTeams.getMissionManager().handleMissionUpdate(team, caughtEntity.getLocation().getWorld(), "FISH", ((Item) caughtEntity).getItemStack().getType().name(), 1); + }); + + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerInteractListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerInteractListener.java new file mode 100644 index 00000000..b0ed27b7 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerInteractListener.java @@ -0,0 +1,157 @@ +package com.iridium.iridiumteams.listeners; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamSetting; +import com.iridium.iridiumteams.database.TeamSpawners; +import lombok.AllArgsConstructor; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SpawnEggMeta; + +import java.util.Arrays; +import java.util.List; + + @AllArgsConstructor + public class PlayerInteractListener> implements Listener { + private final IridiumTeams iridiumTeams; + private final List redstoneTriggers = Arrays.asList(XMaterial.LEVER, XMaterial.STRING, XMaterial.TRIPWIRE, XMaterial.TRIPWIRE_HOOK, XMaterial.SCULK_SENSOR, XMaterial.CALIBRATED_SCULK_SENSOR); + + @EventHandler(ignoreCancelled = true) + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) return; + Player player = event.getPlayer(); + U user = iridiumTeams.getUserManager().getUser(player); + + iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, event.getClickedBlock().getLocation()).ifPresent(team -> { + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.OPEN_CONTAINERS.getPermissionKey()) && event.getClickedBlock().getState() instanceof InventoryHolder) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotOpenContainers + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + } + + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.DOORS.getPermissionKey()) && isDoor(XMaterial.matchXMaterial(event.getClickedBlock().getType()))) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotOpenDoors + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + } + + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.REDSTONE.getPermissionKey()) && isRedstoneTrigger(XMaterial.matchXMaterial(event.getClickedBlock().getType()))) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotTriggerRedstone + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + } + + if (event.getAction() == Action.PHYSICAL) { + TeamSetting cropTrampleTeamSetting = iridiumTeams.getTeamManager().getTeamSetting(team, SettingType.CROP_TRAMPLE.getSettingKey()); + if (cropTrampleTeamSetting == null) return; + if (cropTrampleTeamSetting.getValue().equalsIgnoreCase("Disabled") && (XMaterial.matchXMaterial(event.getClickedBlock().getType()) == XMaterial.FARMLAND)) { + event.setCancelled(true); + } + } + + if(isSpawner(XMaterial.matchXMaterial(event.getClickedBlock().getType())) + && (isSpawnEgg(event.getPlayer().getInventory().getItemInMainHand().getItemMeta()) + || isSpawnEgg(event.getPlayer().getInventory().getItemInOffHand().getItemMeta()))) { + + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.SPAWNERS.getPermissionKey())) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotBreakSpawners + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + event.setCancelled(true); + } else { + + ItemStack itemStack; + if(isSpawnEgg(event.getPlayer().getInventory().getItemInMainHand().getItemMeta())) itemStack = event.getPlayer().getInventory().getItemInMainHand(); + else itemStack = event.getPlayer().getInventory().getItemInOffHand(); + + CreatureSpawner creatureSpawner = (CreatureSpawner) event.getClickedBlock().getState(); + + EntityType newEntityType = getEntityType(itemStack); + if(newEntityType == EntityType.UNKNOWN) newEntityType = creatureSpawner.getSpawnedType(); + + TeamSpawners teamSpawners; + if(creatureSpawner.getSpawnedType() != null) { + teamSpawners = iridiumTeams.getTeamManager().getTeamSpawners(team, creatureSpawner.getSpawnedType()); + teamSpawners.setAmount(Math.max(0, teamSpawners.getAmount() - 1)); + } + + teamSpawners = iridiumTeams.getTeamManager().getTeamSpawners(team, newEntityType); + teamSpawners.setAmount(teamSpawners.getAmount() + 1); + } + } + }); + } + + @EventHandler + public void onSignChangeEvent(SignChangeEvent event) { + Player player = event.getPlayer(); + U user = iridiumTeams.getUserManager().getUser(player); + + iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, event.getBlock().getLocation()).ifPresent(team -> { + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.INTERACT.getPermissionKey())) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotInteract + .replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + event.setCancelled(true); + } + }); + } + + @EventHandler + public void onPlayerInteractEntityEvent(PlayerInteractEntityEvent event) { + Player player = event.getPlayer(); + U user = iridiumTeams.getUserManager().getUser(player); + + iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, event.getRightClicked().getLocation()).ifPresent(team -> { + if (!iridiumTeams.getTeamManager().getTeamPermission(team, user, PermissionType.INTERACT.getPermissionKey())) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotInteract + .replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + event.setCancelled(true); + } + }); + } + + private EntityType getEntityType(ItemStack itemStack) { + try { + return EntityType.valueOf(itemStack.getType().name().toUpperCase().replace("_SPAWN_EGG", "")); + } + catch(NullPointerException e) { + iridiumTeams.getLogger().warning(e.getMessage()); + return EntityType.UNKNOWN; + } + } + + private boolean isSpawner(XMaterial material) { + return material.name().toLowerCase().contains("spawner"); + } + + private boolean isSpawnEgg(ItemMeta itemMeta) { + return itemMeta instanceof SpawnEggMeta; + } + + private boolean isRedstoneTrigger(XMaterial material) { + return redstoneTriggers.contains(material) || material.name().toLowerCase().contains("_button") || material.name().toLowerCase().contains("_pressure_plate"); + } + + private boolean isDoor(XMaterial material) { + return material.name().toLowerCase().contains("_door") || material.name().toLowerCase().contains("fence_gate") || material.name().toLowerCase().contains("trapdoor"); + } + } diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerJoinListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerJoinListener.java index d6975308..97d71bba 100755 --- a/src/main/java/com/iridium/iridiumteams/listeners/PlayerJoinListener.java +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerJoinListener.java @@ -1,9 +1,11 @@ package com.iridium.iridiumteams.listeners; +import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.database.IridiumUser; import com.iridium.iridiumteams.database.Team; import lombok.AllArgsConstructor; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -22,6 +24,16 @@ public void onPlayerJoin(PlayerJoinEvent event) { // Update the internal username in case of name change user.setName(event.getPlayer().getName()); + + + if (player.isOp() && iridiumTeams.getConfiguration().patreonMessage) { + Bukkit.getScheduler().runTaskLater(iridiumTeams, () -> + player.sendMessage(StringUtils.color(iridiumTeams.getConfiguration().prefix + " &7Thanks for using " + iridiumTeams.getDescription().getName() + ", if you like the plugin, consider donating at " + iridiumTeams.getCommandManager().getColor() + "www.patreon.com/Peaches_MLG")) + , 5); + } + + // This isnt great, but as this requires database operations, we can pre-run it async, otherwise it will have to be loaded sync. I need to recode/rethink this eventually but this should fix some lag caused by missions for now + iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()).ifPresent(team -> Bukkit.getScheduler().runTaskAsynchronously(iridiumTeams, () -> iridiumTeams.getMissionManager().generateMissionData(team))); } } diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerMoveListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerMoveListener.java new file mode 100755 index 00000000..bb2f6166 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerMoveListener.java @@ -0,0 +1,70 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class PlayerMoveListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + + Location to = event.getTo(); + if (to == null) return; // This is possible apparently? + + Location from = event.getFrom(); + + // might help speed things up - if the next location does not change blocks, why do anything? + if ((from.getBlockX() == to.getBlockX()) && (from.getBlockZ() == to.getBlockZ()) && (from.getBlockY() == to.getBlockY())) return; + + Player player = event.getPlayer(); + + Optional fromTeam = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(event.getPlayer(), from); + Optional toTeam = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(event.getPlayer(), to); + + if (fromTeam.isPresent()) { + iridiumTeams.getTeamManager().sendTeamTime(player); + iridiumTeams.getTeamManager().sendTeamWeather(player); + } + + if (toTeam.isPresent() && !iridiumTeams.getTeamManager().canVisit(player, toTeam.get())) { + event.setCancelled(true); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotVisit + .replace("%prefix%", iridiumTeams.getConfiguration().prefix)) + ); + return; + } + + // we should only be checking if the player is flying if the flight enhancement is enabled (this is a global config setting) + // we're not an anti-cheat, we don't care otherwise + U user = iridiumTeams.getUserManager().getUser(player); + if (iridiumTeams.getEnhancements().flightEnhancement.enabled && user.isFlying()) { + if (!user.canFly(iridiumTeams) && player.getGameMode() != GameMode.CREATIVE && player.getGameMode() != GameMode.SPECTATOR) { + user.setFlying(false); + player.setFlying(false); + player.setAllowFlight(false); + + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().flightDisabled + .replace("%prefix%", iridiumTeams.getConfiguration().prefix)) + ); + } + } + + if (!toTeam.isPresent()) return; + if (!toTeam.map(T::getId).orElse(-99999).equals(fromTeam.map(T::getId).orElse(-99999))) { + iridiumTeams.getTeamManager().sendTeamTitle(player, toTeam.get()); + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PlayerTeleportListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PlayerTeleportListener.java new file mode 100755 index 00000000..5981ec0a --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/PlayerTeleportListener.java @@ -0,0 +1,51 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class PlayerTeleportListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler + public void onPlayerTeleport(PlayerTeleportEvent event) { + Player player = event.getPlayer(); + Location to = event.getTo(); + Location from = event.getFrom(); + if (to == null) return; // This is possible apparently? + U user = iridiumTeams.getUserManager().getUser(player); + Optional toTeam = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, to); + Optional fromTeam = iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player, from); + if (user.isFlying() && (to.getBlockX() != from.getBlockX() || to.getBlockZ() != from.getBlockZ()) && !user.canFly(iridiumTeams)) { + user.setFlying(false); + player.setAllowFlight(false); + player.setFlying(false); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().flightDisabled + .replace("%prefix%", iridiumTeams.getConfiguration().prefix)) + ); + } + if (!toTeam.isPresent()) return; + if (!iridiumTeams.getTeamManager().canVisit(player, toTeam.get())) { + event.setCancelled(true); + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotVisit + .replace("%prefix%", iridiumTeams.getConfiguration().prefix)) + ); + return; + } + + if (!toTeam.map(T::getId).orElse(-1).equals(fromTeam.map(T::getId).orElse(-1))) { + iridiumTeams.getTeamManager().sendTeamTitle(player, toTeam.get()); + } + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/PotionBrewListener.java b/src/main/java/com/iridium/iridiumteams/listeners/PotionBrewListener.java new file mode 100644 index 00000000..5c67cf14 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/PotionBrewListener.java @@ -0,0 +1,33 @@ + +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.BrewEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; + +@AllArgsConstructor +public class PotionBrewListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void monitorPotionBrew(BrewEvent event) { + Bukkit.getScheduler().runTask(iridiumTeams, () -> iridiumTeams.getTeamManager().getTeamViaLocation(event.getBlock().getLocation()).ifPresent(team -> { + for (int i = 0; i < 3; i++) { + ItemStack itemStack = event.getContents().getItem(i); + if (itemStack != null && itemStack.getItemMeta() instanceof PotionMeta) { + PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta(); + iridiumTeams.getMissionManager().handleMissionUpdate(team, event.getBlock().getLocation().getWorld(), "BREW", potionMeta.getBasePotionData().getType() + ":" + (potionMeta.getBasePotionData().isUpgraded() ? 2 : 1), 1); + } + } + })); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/SettingUpdateListener.java b/src/main/java/com/iridium/iridiumteams/listeners/SettingUpdateListener.java new file mode 100755 index 00000000..e69a3e14 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/SettingUpdateListener.java @@ -0,0 +1,32 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.api.SettingUpdateEvent; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Objects; + +@AllArgsConstructor +public class SettingUpdateListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler + public void onSettingUpdate(SettingUpdateEvent event) { + if (event.getSetting().equalsIgnoreCase(SettingType.TIME.getSettingKey())) { + iridiumTeams.getTeamManager().getTeamMembers(event.getTeam()).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(player -> + iridiumTeams.getTeamManager().sendTeamTime(player) + ); + } + if (event.getSetting().equalsIgnoreCase(SettingType.WEATHER.getSettingKey())) { + iridiumTeams.getTeamManager().getTeamMembers(event.getTeam()).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(player -> + iridiumTeams.getTeamManager().sendTeamWeather(player) + ); + } + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListener.java b/src/main/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListener.java index cbb52935..e72bad64 100755 --- a/src/main/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListener.java +++ b/src/main/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListener.java @@ -9,6 +9,7 @@ import lombok.AllArgsConstructor; import org.bukkit.block.CreatureSpawner; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.SpawnerSpawnEvent; @@ -16,7 +17,7 @@ public class SpawnerSpawnListener> implements Listener { private final IridiumTeams iridiumTeams; - @EventHandler(ignoreCancelled = true) + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onCreatureSpawn(SpawnerSpawnEvent event) { iridiumTeams.getTeamManager().getTeamViaLocation(event.getLocation()).ifPresent(team -> { Enhancement spawnerEnhancement = iridiumTeams.getEnhancements().spawnerEnhancement; @@ -27,8 +28,11 @@ public void onCreatureSpawn(SpawnerSpawnEvent event) { if (!teamEnhancement.isActive(spawnerEnhancement.type)) return; if (data == null) return; - spawner.setSpawnCount(data.spawnCount); + int spawnCount = spawner.getSpawnCount(); + spawner.setSpawnCount((spawner.getSpawnCount() * data.spawnMultiplier) + data.spawnCount); + if(spawner.getMaxSpawnDelay() != data.spawnDelay) { spawner.setMaxSpawnDelay(data.spawnDelay); } spawner.update(true); + spawner.setSpawnCount(spawnCount); }); } } diff --git a/src/main/java/com/iridium/iridiumteams/listeners/StructureGrowListener.java b/src/main/java/com/iridium/iridiumteams/listeners/StructureGrowListener.java new file mode 100755 index 00000000..2a04231f --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/StructureGrowListener.java @@ -0,0 +1,26 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import lombok.AllArgsConstructor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.StructureGrowEvent; + +import java.util.Optional; + +@AllArgsConstructor +public class StructureGrowListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onBlockSpread(StructureGrowEvent event) { + int currentTeam = iridiumTeams.getTeamManager().getTeamViaLocation(event.getLocation()).map(T::getId).orElse(0); + event.getBlocks().removeIf(blockState -> { + Optional team = iridiumTeams.getTeamManager().getTeamViaLocation(blockState.getLocation()); + return team.map(T::getId).orElse(currentTeam) != currentTeam; + }); + } + +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/listeners/TeamLevelUpListener.java b/src/main/java/com/iridium/iridiumteams/listeners/TeamLevelUpListener.java new file mode 100644 index 00000000..507639de --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/listeners/TeamLevelUpListener.java @@ -0,0 +1,50 @@ +package com.iridium.iridiumteams.listeners; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.Reward; +import com.iridium.iridiumteams.api.TeamLevelUpEvent; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamReward; +import lombok.AllArgsConstructor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@AllArgsConstructor +public class TeamLevelUpListener> implements Listener { + private final IridiumTeams iridiumTeams; + + @EventHandler(ignoreCancelled = true) + public void onTeamLevelUp(TeamLevelUpEvent event) { + for (U member : iridiumTeams.getTeamManager().getTeamMembers(event.getTeam())) { + Player player = member.getPlayer(); + if(player == null) return; + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().teamLevelUp + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%level%", String.valueOf(event.getTeam().getLevel())) + )); + } + + if (event.isFirstTimeAsLevel() && event.getLevel() > 1) { + if(!iridiumTeams.getConfiguration().giveLevelRewards) return; + Reward reward = null; + List> entries = iridiumTeams.getConfiguration().levelRewards.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toList()); + for (Map.Entry entry : entries) { + if (event.getLevel() % entry.getKey() == 0) { + reward = entry.getValue(); + } + } + if (reward != null) { + reward.item.lore = StringUtils.processMultiplePlaceholders(reward.item.lore, iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(event.getTeam())); + reward.item.displayName = StringUtils.processMultiplePlaceholders(reward.item.displayName, iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(event.getTeam())); + iridiumTeams.getTeamManager().addTeamReward(new TeamReward(event.getTeam(), reward)); + } + } + } +} diff --git a/src/main/java/com/iridium/iridiumteams/managers/CommandManager.java b/src/main/java/com/iridium/iridiumteams/managers/CommandManager.java index 2e22466a..d7d124f2 100755 --- a/src/main/java/com/iridium/iridiumteams/managers/CommandManager.java +++ b/src/main/java/com/iridium/iridiumteams/managers/CommandManager.java @@ -1,6 +1,7 @@ package com.iridium.iridiumteams.managers; import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumcore.utils.TimeUtils; import com.iridium.iridiumteams.IridiumTeams; import com.iridium.iridiumteams.commands.Command; import com.iridium.iridiumteams.database.IridiumUser; @@ -12,6 +13,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.time.Duration; import java.util.*; import java.util.stream.Collectors; @@ -47,6 +49,9 @@ public void registerCommands() { registerCommand(iridiumTeams.getCommands().inviteCommand); registerCommand(iridiumTeams.getCommands().unInviteCommand); registerCommand(iridiumTeams.getCommands().invitesCommand); + registerCommand(iridiumTeams.getCommands().trustCommand); + registerCommand(iridiumTeams.getCommands().unTrustCommand); + registerCommand(iridiumTeams.getCommands().trustsCommand); registerCommand(iridiumTeams.getCommands().kickCommand); registerCommand(iridiumTeams.getCommands().leaveCommand); registerCommand(iridiumTeams.getCommands().deleteCommand); @@ -65,16 +70,26 @@ public void registerCommands() { registerCommand(iridiumTeams.getCommands().boostersCommand); registerCommand(iridiumTeams.getCommands().upgradesCommand); registerCommand(iridiumTeams.getCommands().flyCommand); - registerCommand(iridiumTeams.getCommands().valueCommand); registerCommand(iridiumTeams.getCommands().topCommand); registerCommand(iridiumTeams.getCommands().recalculateCommand); + registerCommand(iridiumTeams.getCommands().warpsCommand); + registerCommand(iridiumTeams.getCommands().warpCommand); + registerCommand(iridiumTeams.getCommands().setWarpCommand); + registerCommand(iridiumTeams.getCommands().deleteWarpCommand); + registerCommand(iridiumTeams.getCommands().editWarpCommand); + registerCommand(iridiumTeams.getCommands().missionsCommand); + registerCommand(iridiumTeams.getCommands().rewardsCommand); + registerCommand(iridiumTeams.getCommands().experienceCommand); + registerCommand(iridiumTeams.getCommands().shopCommand); + registerCommand(iridiumTeams.getCommands().settingsCommand); + registerCommand(iridiumTeams.getCommands().blockValueCommand); + registerCommand(iridiumTeams.getCommands().levelCommand); } public void registerCommand(Command command) { - if (command.enabled) { - int index = Collections.binarySearch(commands, command, Comparator.comparing(cmd -> cmd.aliases.get(0))); - commands.add(index < 0 ? -(index + 1) : index, command); - } + if (!command.enabled) return; + int index = Collections.binarySearch(commands, command, Comparator.comparing(cmd -> cmd.aliases.get(0))); + commands.add(index < 0 ? -(index + 1) : index, command); } @Override @@ -88,15 +103,7 @@ public boolean onCommand(@NotNull CommandSender commandSender, @NotNull org.bukk // We don't want to execute other commands or ones that are disabled if (!command.aliases.contains(args[0])) continue; - if (!command.hasPermission(commandSender, iridiumTeams)) { - commandSender.sendMessage(StringUtils.color(iridiumTeams.getMessages().noPermission - .replace("%prefix%", iridiumTeams.getConfiguration().prefix) - )); - return false; - } - - command.execute(commandSender, Arrays.copyOfRange(args, 1, args.length), iridiumTeams); - return true; + return executeCommand(commandSender, command, Arrays.copyOfRange(args, 1, args.length)); } // Unknown command message @@ -106,15 +113,40 @@ public boolean onCommand(@NotNull CommandSender commandSender, @NotNull org.bukk return false; } + public boolean executeCommand(CommandSender commandSender, Command command, String[] args) { + if (!command.hasPermission(commandSender, iridiumTeams)) { + commandSender.sendMessage(StringUtils.color(iridiumTeams.getMessages().noPermission + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + if (command.isOnCooldown(commandSender, iridiumTeams)) { + Duration remainingTime = command.getCooldownProvider().getRemainingTime(commandSender); + String formattedTime = TimeUtils.formatDuration(iridiumTeams.getMessages().activeCooldown, remainingTime); + + commandSender.sendMessage(StringUtils.color(formattedTime + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + if (command.execute(commandSender, args, iridiumTeams)) { + command.getCooldownProvider().applyCooldown(commandSender); + } + return true; + } + public abstract void noArgsDefault(@NotNull CommandSender commandSender); private List getTabComplete(CommandSender commandSender, String[] args) { if (args.length == 1) { ArrayList result = new ArrayList<>(); for (Command command : commands) { + if(command.isSuperSecretCommand()) continue; for (String alias : command.aliases) { if (!alias.toLowerCase().startsWith(args[0].toLowerCase())) continue; - if (commandSender.hasPermission(command.permission) || command.permission.equalsIgnoreCase("")) { + if (command.hasPermission(commandSender, iridiumTeams)) { result.add(alias); } } @@ -123,8 +155,9 @@ private List getTabComplete(CommandSender commandSender, String[] args) } for (Command command : commands) { + if(command.isSuperSecretCommand()) continue; if (!command.aliases.contains(args[0].toLowerCase())) continue; - if (commandSender.hasPermission(command.permission) || command.permission.equalsIgnoreCase("")) { + if (command.hasPermission(commandSender, iridiumTeams)) { return command.onTabComplete(commandSender, Arrays.copyOfRange(args, 1, args.length), iridiumTeams); } } diff --git a/src/main/java/com/iridium/iridiumteams/managers/IridiumUserManager.java b/src/main/java/com/iridium/iridiumteams/managers/IridiumUserManager.java index 842e94b1..49a66e33 100755 --- a/src/main/java/com/iridium/iridiumteams/managers/IridiumUserManager.java +++ b/src/main/java/com/iridium/iridiumteams/managers/IridiumUserManager.java @@ -5,6 +5,7 @@ import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; +import java.util.List; import java.util.Optional; import java.util.UUID; @@ -13,4 +14,6 @@ public interface IridiumUserManager> { @NotNull U getUser(@NotNull OfflinePlayer offlinePlayer); Optional getUserByUUID(@NotNull UUID uuid); + + List getUsers(); } diff --git a/src/main/java/com/iridium/iridiumteams/managers/MissionManager.java b/src/main/java/com/iridium/iridiumteams/managers/MissionManager.java new file mode 100644 index 00000000..f7c5ee1e --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/managers/MissionManager.java @@ -0,0 +1,175 @@ +package com.iridium.iridiumteams.managers; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.*; +import com.iridium.iridiumteams.gui.MissionGUI; +import com.iridium.iridiumteams.missions.Mission; +import com.iridium.iridiumteams.missions.MissionData; +import com.iridium.iridiumteams.missions.MissionType; +import org.bukkit.World; + +import java.time.DayOfWeek; +import java.time.LocalDateTime; +import java.time.temporal.TemporalAdjusters; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +public class MissionManager> { + private final IridiumTeams iridiumTeams; + + public MissionManager(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + public LocalDateTime getExpirationTime(MissionType missionType, LocalDateTime startTime) { + LocalDateTime baseTime = startTime.withSecond(0).withMinute(0).withHour(0); + switch (missionType) { + case ONCE: + return null; + case DAILY: + return baseTime.plusDays(1); + case WEEKLY: + baseTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); + case INFINITE: + return null; + } + return null; + } + + /** + * Determines the missions to be checked + * + * @param team The team + * @param missionWorld The world we are in + * @param missionType The mission type e.g. BREAK + * @param identifier The mission identifier e.g. COBBLESTONE + * @param amount The amount we are incrementing by + */ + public void handleMissionUpdate(T team, World missionWorld, String missionType, String identifier, int amount) { + + if (iridiumTeams.getConfiguration().whitelistedWorlds.stream().noneMatch(world -> missionWorld.getName().equalsIgnoreCase(world)) && !iridiumTeams.getConfiguration().whitelistedWorlds.isEmpty()) { + return; + } + + generateMissionData(team); + incrementMission(team, missionType + ":" + identifier, amount); + incrementMission(team, missionType + ":ANY", amount); + incrementMission(team, missionWorld.getEnvironment().name() + ":" + missionType + ":" + identifier, amount); + incrementMission(team, missionWorld.getEnvironment().name() + ":" + missionType + ":ANY", amount); + + for (Map.Entry> itemList : iridiumTeams.getMissions().customMaterialLists.entrySet()) { + if (itemList.getValue().contains(identifier)) { + incrementMission(team, missionType + ":" + itemList.getKey(), amount); + incrementMission(team, missionWorld.getEnvironment().name() + ":" + missionType + ":" + itemList.getKey(), amount); + } + } + } + + private synchronized void incrementMission(T team, String condition, int amount) { + List teamMissions = iridiumTeams.getTeamManager().getTeamMissions(team); + String[] missionConditions = condition.toUpperCase().split(":"); + + for (Map.Entry entry : iridiumTeams.getMissions().missions.entrySet()) { + Optional teamMission = teamMissions.stream() + .filter(mission -> mission.getMissionName().equals(entry.getKey())) + .findFirst(); + if (!teamMission.isPresent()) continue; + //Check if we have completed the mission before by testing if we update any values + boolean completedBefore = true; + int level = teamMissions.stream().filter(m -> m.getMissionName().equals(entry.getKey())).map(TeamMission::getMissionLevel).findFirst().orElse(1); + MissionData missionData = entry.getValue().getMissionData().get(level); + if(team.getLevel() < missionData.getMinLevel()) continue; + if (!dependenciesComplete(team, missionData.getMissionDependencies(), teamMissions)) continue; + + List missions = missionData.getMissions(); + for (int missionIndex = 0; missionIndex < missions.size(); missionIndex++) { + TeamMissionData teamMissionData = iridiumTeams.getTeamManager().getTeamMissionData(teamMission.get(), missionIndex); + String missionRequirement = missions.get(missionIndex).toUpperCase(); + String[] conditions = missionRequirement.split(":"); + // If the conditions arnt the same length continue (+1 since we add amount onto the missionConditions dynamically) + if (missionConditions.length + 1 != conditions.length) continue; + + // Check if this is a mission we want to increment + boolean matches = matchesMission(missionConditions, conditions); + if (!matches) continue; + + String number = conditions[condition.split(":").length]; + + try { + int totalAmount = Integer.parseInt(number); + if (teamMissionData.getProgress() >= totalAmount) break; + completedBefore = false; + teamMissionData.setProgress(Math.min(teamMissionData.getProgress() + amount, totalAmount)); + } catch (NumberFormatException exception) { + iridiumTeams.getLogger().warning("Unknown format " + missionRequirement); + iridiumTeams.getLogger().warning(number + " Is not a number"); + } + } + + // Check if this mission is now completed + if (!completedBefore && hasCompletedMission(team, entry.getKey(), missionData)) { + iridiumTeams.getTeamManager().addTeamReward(new TeamReward(team, missionData.getReward())); + iridiumTeams.getTeamManager().getTeamMembers(team).stream().map(U::getPlayer).filter(Objects::nonNull).forEach(member -> { + member.sendMessage(StringUtils.color(missionData.getMessage().replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + missionData.getCompleteSound().play(member); + }); + // Next Mission Level + if (entry.getValue().getMissionData().containsKey(level + 1)) { + teamMission.get().setMissionLevel(level + 1); + iridiumTeams.getTeamManager().resetTeamMissionData(teamMission.get()); + } + } + } + } + + private boolean dependenciesComplete(T team, List missionDependencies, List teamMissions) { + for (MissionData.MissionDependency missionDependency : missionDependencies) { + Optional teamMission = teamMissions.stream() + .filter(mission -> mission.getMissionName().equals(missionDependency.getMission())) + .filter(mission -> mission.getMissionLevel() == missionDependency.getLevel()) + .findFirst(); + if (!teamMission.isPresent()) return false; + MissionData missionData = iridiumTeams.getMissions().missions.get(missionDependency.getMission()).getMissionData().get(missionDependency.getLevel()); + if (!hasCompletedMission(team, missionDependency.getMission(), missionData)) return false; + } + return true; + } + + private boolean matchesMission(String[] missionConditions, String[] conditions) { + for (int i = 0; i < missionConditions.length; i++) { + if (!conditions[i].equals(missionConditions[i])) { + return false; + } + } + return true; + } + + private boolean hasCompletedMission(T team, String missionName, MissionData missionData) { + List missions = missionData.getMissions(); + TeamMission teamMission = iridiumTeams.getTeamManager().getTeamMission(team, missionName); + for (int missionIndex = 0; missionIndex < missions.size(); missionIndex++) { + TeamMissionData teamMissionData = iridiumTeams.getTeamManager().getTeamMissionData(teamMission, missionIndex); + String missionRequirement = missions.get(missionIndex).toUpperCase(); + String[] conditions = missionRequirement.split(":"); + String number = conditions[conditions.length - 1]; + + try { + if (teamMissionData.getProgress() < Integer.parseInt(number)) return false; + } catch (NumberFormatException exception) { + iridiumTeams.getLogger().warning("Unknown format " + missionRequirement); + iridiumTeams.getLogger().warning(number + " Is not a number"); + } + } + return true; + } + + public void generateMissionData(T team) { + // Generate mission data by opening all missionGUI's + new MissionGUI<>(team, MissionType.ONCE, null, iridiumTeams).getInventory(); + new MissionGUI<>(team, MissionType.DAILY, null, iridiumTeams).getInventory(); + new MissionGUI<>(team, MissionType.WEEKLY, null, iridiumTeams).getInventory(); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/managers/ShopManager.java b/src/main/java/com/iridium/iridiumteams/managers/ShopManager.java new file mode 100644 index 00000000..69e844cd --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/managers/ShopManager.java @@ -0,0 +1,183 @@ +package com.iridium.iridiumteams.managers; + +import com.iridium.iridiumcore.utils.InventoryUtils; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.bank.BankItem; +import com.iridium.iridiumteams.configs.Shop; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.database.TeamBank; +import net.milkbowl.vault.economy.Economy; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class ShopManager> { + private final IridiumTeams iridiumTeams; + + public ShopManager(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + public void buy(Player player, Shop.ShopItem shopItem, int amount) { + if (!canPurchase(player, shopItem, amount)) { + iridiumTeams.getShop().failSound.play(player); + return; + } + + purchase(player, shopItem, amount); + + if (shopItem.command == null) { + // Add item to the player Inventory + if (!iridiumTeams.getShop().dropItemWhenFull && !InventoryUtils.hasEmptySlot(player.getInventory())) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().inventoryFull + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return; + } + + ItemStack itemStack = shopItem.type.parseItem(); + itemStack.setAmount(amount); + + for (ItemStack dropItem : player.getInventory().addItem(itemStack).values()) { + player.getWorld().dropItem(player.getEyeLocation(), dropItem); + } + } else { + // Run the command + String command = shopItem.command + .replace("%player%", player.getName()) + .replace("%amount%", String.valueOf(amount)); + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + } + + iridiumTeams.getShop().successSound.play(player); + + List bankPlaceholders = iridiumTeams.getBankItemList().stream() + .map(BankItem::getName) + .map(name -> new Placeholder(name + "_cost", formatPrice(getBankBalance(player, name)))) + .collect(Collectors.toList()); + double moneyCost = calculateCost(amount, shopItem.defaultAmount, shopItem.buyCost.money); + + player.sendMessage(StringUtils.color(StringUtils.processMultiplePlaceholders(iridiumTeams.getMessages().successfullyBought + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%amount%", String.valueOf(amount)) + .replace("%item%", StringUtils.color(shopItem.name)) + .replace("%vault_cost%", formatPrice(moneyCost)), + bankPlaceholders) + )); + } + + public void sell(Player player, Shop.ShopItem shopItem, int amount) { + int inventoryAmount = InventoryUtils.getAmount(player.getInventory(), shopItem.type); + if (inventoryAmount == 0) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().noSuchItem + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + iridiumTeams.getShop().failSound.play(player); + return; + } + int soldAmount = Math.min(inventoryAmount, amount); + double moneyReward = calculateCost(soldAmount, shopItem.defaultAmount, shopItem.sellCost.money); + + InventoryUtils.removeAmount(player.getInventory(), shopItem.type, soldAmount); + + iridiumTeams.getEconomy().depositPlayer(player, moneyReward); + + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().successfullySold + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%amount%", String.valueOf(soldAmount)) + .replace("%item%", StringUtils.color(shopItem.name)) + .replace("%vault_reward%", String.valueOf(moneyReward)) + )); + iridiumTeams.getShop().successSound.play(player); + } + + private double getBankBalance(Player player, String bankItem) { + U user = iridiumTeams.getUserManager().getUser(player); + return iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()) + .map(team -> iridiumTeams.getTeamManager().getTeamBank(team, bankItem)) + .map(TeamBank::getNumber) + .orElse(0.0); + } + + private void setBankBalance(Player player, String bankItem, double amount) { + U user = iridiumTeams.getUserManager().getUser(player); + Optional team = iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); + if (!team.isPresent()) return; + iridiumTeams.getTeamManager().getTeamBank(team.get(), bankItem).setNumber(amount); + } + + private boolean canPurchase(Player player, Shop.ShopItem shopItem, int amount) { + + if(shopItem.minLevel > 1) { + U user = iridiumTeams.getUserManager().getUser(player); + Optional team = iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); + + if(!team.isPresent()) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().dontHaveTeam + .replace("%prefix%", iridiumTeams.getConfiguration().prefix))); + return false; + } + + if(team.get().getLevel() < shopItem.minLevel) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().notHighEnoughLevel + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + .replace("%level%", String.valueOf(shopItem.minLevel)))); + return false; + } + } + + double moneyCost = calculateCost(amount, shopItem.defaultAmount, shopItem.buyCost.money); + Economy economy = iridiumTeams.getEconomy(); + for (String bankItem : shopItem.buyCost.bankItems.keySet()) { + double cost = calculateCost(amount, shopItem.defaultAmount, shopItem.buyCost.bankItems.get(bankItem)); + if (getBankBalance(player, bankItem) < cost) return false; + } + + if(!(moneyCost == 0 || economy != null && economy.getBalance(player) >= moneyCost)) { + player.sendMessage(StringUtils.color(iridiumTeams.getMessages().cannotAfford + .replace("%prefix%", iridiumTeams.getConfiguration().prefix) + )); + return false; + } + + return true; + } + + private void purchase(Player player, Shop.ShopItem shopItem, int amount) { + double moneyCost = calculateCost(amount, shopItem.defaultAmount, shopItem.buyCost.money); + iridiumTeams.getEconomy().withdrawPlayer(player, moneyCost); + + for (String bankItem : shopItem.buyCost.bankItems.keySet()) { + double cost = calculateCost(amount, shopItem.defaultAmount, shopItem.buyCost.bankItems.get(bankItem)); + setBankBalance(player, bankItem, getBankBalance(player, bankItem) - cost); + } + } + + private double calculateCost(int amount, int defaultAmount, double defaultPrice) { + double costPerItem = defaultPrice / defaultAmount; + return round(costPerItem * amount, 2); + } + + private double round(double value, int places) { + BigDecimal bigDecimal = BigDecimal.valueOf(value); + bigDecimal = bigDecimal.setScale(places, RoundingMode.HALF_UP); + return bigDecimal.doubleValue(); + } + + public String formatPrice(double value) { + if (iridiumTeams.getShop().abbreviatePrices) { + return iridiumTeams.getConfiguration().numberFormatter.format(value); + } + return String.valueOf(value); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/managers/SupportManager.java b/src/main/java/com/iridium/iridiumteams/managers/SupportManager.java new file mode 100644 index 00000000..5baf5274 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/managers/SupportManager.java @@ -0,0 +1,66 @@ +package com.iridium.iridiumteams.managers; + +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.support.*; +import lombok.Getter; +import org.bukkit.Bukkit; + +import java.util.HashSet; + +public class SupportManager> { + + private final IridiumTeams iridiumTeams; + + public SupportManager(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + @Getter + private HashSet> stackerSupport = new HashSet<>(); + @Getter + private HashSet> spawnerSupport = new HashSet<>(); + @Getter + private HashSet> spawnSupport = new HashSet<>(); + @Getter + private HashSet providerList = new HashSet<>(); + + public boolean supportedPluginEnabled(String pluginName) { + return Bukkit.getPluginManager().isPluginEnabled(pluginName); + } + + private void registerBlockStackerSupport() { + if (supportedPluginEnabled("RoseStacker")) + stackerSupport.add(new RoseStackerSupport<>(iridiumTeams)); + + if (supportedPluginEnabled("WildStacker")) + stackerSupport.add(new WildStackerSupport<>(iridiumTeams)); + + if(supportedPluginEnabled("ObsidianStacker")) + stackerSupport.add(new ObsidianStackerSupport<>(iridiumTeams)); + } + + private void registerSpawnerSupport() { + if (supportedPluginEnabled("RoseStacker")) + spawnerSupport.add(new RoseStackerSupport<>(iridiumTeams)); + + if (supportedPluginEnabled("WildStacker")) + spawnerSupport.add(new WildStackerSupport<>(iridiumTeams)); + } + + private void registerSpawnSupport() { + if (supportedPluginEnabled("EssentialsSpawn")) + spawnSupport.add(new EssentialsSpawnSupport<>(iridiumTeams)); + } + + public void registerSupport() { + registerBlockStackerSupport(); + registerSpawnerSupport(); + registerSpawnSupport(); + + stackerSupport.forEach(provider -> providerList.add(provider.supportProvider())); + spawnerSupport.forEach(provider -> providerList.add(provider.supportProvider())); + spawnSupport.forEach(provider -> providerList.add(provider.supportProvider())); + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/managers/TeamManager.java b/src/main/java/com/iridium/iridiumteams/managers/TeamManager.java index 3d5bfb87..b0b180c3 100755 --- a/src/main/java/com/iridium/iridiumteams/managers/TeamManager.java +++ b/src/main/java/com/iridium/iridiumteams/managers/TeamManager.java @@ -1,27 +1,42 @@ package com.iridium.iridiumteams.managers; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumcore.utils.StringUtils; -import com.iridium.iridiumteams.CreateCancelledException; -import com.iridium.iridiumteams.IridiumTeams; -import com.iridium.iridiumteams.PermissionType; -import com.iridium.iridiumteams.Rank; +import com.iridium.iridiumteams.*; +import com.iridium.iridiumteams.api.EnhancementUpdateEvent; import com.iridium.iridiumteams.configs.BlockValues; import com.iridium.iridiumteams.database.*; import com.iridium.iridiumteams.enhancements.Enhancement; import com.iridium.iridiumteams.enhancements.EnhancementData; +import com.iridium.iridiumteams.missions.Mission; +import com.iridium.iridiumteams.missions.MissionType; +import com.iridium.iridiumteams.sorting.TeamSorting; +import com.iridium.iridiumteams.utils.PlayerUtils; +import de.tr7zw.changeme.nbtapi.NBT; +import de.tr7zw.changeme.nbtapi.NBTType; +import io.papermc.lib.PaperLib; +import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.WeatherType; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.time.Duration; import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; public abstract class TeamManager> { + private final TemporaryCache, List> teamTopCache = new TemporaryCache<>(); + private final TemporaryCache teamValueCache = new TemporaryCache<>(); private final IridiumTeams iridiumTeams; public TeamManager(IridiumTeams iridiumTeams) { @@ -34,15 +49,89 @@ public TeamManager(IridiumTeams iridiumTeams) { public abstract Optional getTeamViaLocation(Location location); + /** + * Gets a team via a location, providing a team for cache + * + * @param location The location + * @param teamCache a team for cache, used for if we know the team of a nearby location, and we assume the current location is also in the team (e.g. on a piston event or a BlockFromToEvent) + * @return The Team the location is in + */ + + public abstract Optional getTeamViaLocation(Location location, T teamCache); + + /** + * Gets a team via a location, providing a team for cache + * + * @param location The location + * @param teamCache a team for cache, used for if we know the team of a nearby location, and we assume the current location is also in the team (e.g. on a piston event or a BlockFromToEvent) + * @return The Team the location is in + */ + public abstract Optional getTeamViaLocation(Location location, Optional teamCache); + public abstract Optional getTeamViaNameOrPlayer(String name); + public Optional getTeamViaPlayerLocation(Player player) { + return getTeamViaPlayerLocation(player, player.getLocation()); + } + + /** + * Gets a team via a location, providing a team for cache + * + * @param location The location + * @param player a player for cache, used for if the player is near the new location, since the player has an internal team cache for the team they are currently on) + * @return The Team the location is in + */ + public Optional getTeamViaPlayerLocation(Player player, Location location) { + return getTeamViaLocation(location); + } + + public abstract void sendTeamTitle(Player player, T team); + + public boolean canVisit(Player player, T team) { + TeamSetting teamSetting = getTeamSetting(team, SettingType.TEAM_VISITING.getSettingKey()); + if (teamSetting == null) return true; + U user = iridiumTeams.getUserManager().getUser(player); + return user.isBypassing() || user.getTeamID() == team.getId() || teamSetting.getValue().equalsIgnoreCase("Enabled"); + } + public abstract List getTeams(); - public abstract List getTeamMembers(T team); + public List getTeams(TeamSorting sortType, boolean excludePrivate) { + return teamTopCache.get(sortType, Duration.ofSeconds(10), () -> sortType.getSortedTeams(iridiumTeams).stream() + .filter(team -> { + TeamSetting teamSetting = getTeamSetting(team, SettingType.VALUE_VISIBILITY.getSettingKey()); + return !excludePrivate || (teamSetting == null || teamSetting.getValue().equalsIgnoreCase("Public")); + }) + .collect(Collectors.toList())); + } + + public int getRank(T team, TeamSorting sortType) { + List teams = getTeams(sortType, true); + return teams.indexOf(team) + 1; + } + + public List getTeams(SortType sortType, boolean excludePrivate) { + switch (sortType) { + case Value: + return getTeams(iridiumTeams.getTop().valueTeamSort, excludePrivate); + case Experience: + return getTeams(iridiumTeams.getTop().experienceTeamSort, excludePrivate); + default: + return getTeams(); + } + } + + public List getTeamMembers(T team) { + return iridiumTeams.getUserManager().getUsers().stream() + .filter(user -> user.getTeamID() == team.getId()) + .collect(Collectors.toList()); + } + + public abstract boolean isInTeam(T team, Location location); - public abstract CompletableFuture createTeam(@NotNull Player owner, @NotNull String name) throws CreateCancelledException; + public abstract CompletableFuture createTeam(@NotNull Player owner, @Nullable String name); - public abstract void deleteTeam(T team, U user); + public abstract boolean deleteTeam(T team, U user); public int getUserRank(T team, U user) { if (user.getTeamID() == team.getId()) return user.getUserRank(); @@ -55,11 +144,15 @@ public int getUserRank(T team, U user) { public abstract void setTeamPermission(T team, int rank, String permission, boolean allowed); public boolean getTeamPermission(T team, U user, String permission) { - return user.isBypassing() || getTeamPermission(team, getUserRank(team, user), permission); + if (user.isBypassing()) return true; + if (getTeamTrust(team, user).isPresent()) { + if (getTeamPermission(team, 1, permission)) return true; + } + return getTeamPermission(team, getUserRank(team, user), permission); } public boolean getTeamPermission(T team, U user, PermissionType permissionType) { - return getTeamPermission(team, user, permissionType.getPermissionKey()) || user.isBypassing(); + return getTeamPermission(team, user, permissionType.getPermissionKey()); } public boolean getTeamPermission(Location location, U user, String permission) { @@ -74,24 +167,65 @@ public boolean getTeamPermission(Location location, U user, String permission) { public abstract void deleteTeamInvite(TeamInvite teamInvite); + public abstract Optional getTeamTrust(T team, U user); + + public abstract List getTeamTrusts(T team); + + public abstract void createTeamTrust(T team, U user, U invitee); + + public abstract void deleteTeamTrust(TeamTrust teamTrust); + public abstract TeamBank getTeamBank(T team, String bankItem); public abstract TeamSpawners getTeamSpawners(T team, EntityType entityType); public abstract TeamBlock getTeamBlock(T team, XMaterial xMaterial); + public abstract @Nullable TeamSetting getTeamSetting(T team, String setting); + + public int getTeamLevel(int experience) { + if (!iridiumTeams.getConfiguration().enableLeveling) return 1; + + int flatExpRequirement = iridiumTeams.getConfiguration().flatExpRequirement; + double curvedExpModifier = iridiumTeams.getConfiguration().curvedExpModifier; + + // if flatExpRequirement = 0, set experience per level up to 1 (because dividing by 0 is a no-no) + // if curvedExpModifer = 0, set modifier to 1 (because value ^ 1 = value, and value ^ 0 = 1) + + if (flatExpRequirement == 0) flatExpRequirement = 1; + if (curvedExpModifier == 0) curvedExpModifier = 1; + + return Math.max(1, (int) Math.floor(Math.pow(experience / (double) Math.abs(flatExpRequirement), Math.abs(curvedExpModifier)) + 1)); + } + + public int getExperienceForLevel(int level) { + int flatExpRequirement = iridiumTeams.getConfiguration().flatExpRequirement; + double curvedExpModifier = iridiumTeams.getConfiguration().curvedExpModifier; + + if (flatExpRequirement == 0) flatExpRequirement = 1; + if (curvedExpModifier == 0) curvedExpModifier = 1; + + return (int) Math.floor(Math.abs(flatExpRequirement) * Math.pow(10, Math.log10(level - 1) / Math.abs(curvedExpModifier))); + } + + public int getTeamExperienceForNextLevel(T team) { + return getExperienceForLevel(team.getLevel() + 1) - team.getExperience(); + } + public double getTeamValue(T team) { - double value = 0; + return teamValueCache.get(team, Duration.ofSeconds(1), () -> { + double value = 0; - for (Map.Entry valuableBlock : iridiumTeams.getBlockValues().blockValues.entrySet()) { - value += getTeamBlock(team, valuableBlock.getKey()).getAmount() * valuableBlock.getValue().value; - } + for (Map.Entry valuableBlock : iridiumTeams.getBlockValues().blockValues.entrySet()) { + value += getTeamBlock(team, valuableBlock.getKey()).getAmount() * valuableBlock.getValue().value; + } - for (Map.Entry valuableSpawner : iridiumTeams.getBlockValues().spawnerValues.entrySet()) { - value += getTeamSpawners(team, valuableSpawner.getKey()).getAmount() * valuableSpawner.getValue().value; - } + for (Map.Entry valuableSpawner : iridiumTeams.getBlockValues().spawnerValues.entrySet()) { + value += getTeamSpawners(team, valuableSpawner.getKey()).getAmount() * valuableSpawner.getValue().value; + } - return value; + return value; + }); } public abstract TeamEnhancement getTeamEnhancement(T team, String enhancement); @@ -138,11 +272,195 @@ public boolean UpdateEnhancement(T team, String booster, Player player) { } if (enhancement.levels.containsKey(teamEnhancement.getLevel() + 1)) { - teamEnhancement.setLevel(teamEnhancement.getLevel() + 1); + U user = iridiumTeams.getUserManager().getUser(player); + EnhancementUpdateEvent enhancementUpdateEvent = new EnhancementUpdateEvent<>(team, user, teamEnhancement.getLevel() + 1, booster); + + Bukkit.getPluginManager().callEvent(enhancementUpdateEvent); + if (enhancementUpdateEvent.isCancelled()) return false; + + teamEnhancement.setLevel(enhancementUpdateEvent.getNextLevel()); + } + if (teamEnhancement.getExpirationTime().isBefore(LocalDateTime.now())) { + teamEnhancement.setExpirationTime(LocalDateTime.now().plusHours(1)); + } else { + teamEnhancement.setExpirationTime(teamEnhancement.getExpirationTime().plusHours(1)); } - teamEnhancement.setExpirationTime(LocalDateTime.now().plusHours(1)); return true; } public abstract CompletableFuture recalculateTeam(T team); + + public abstract void createWarp(T team, UUID creator, Location location, String name, String password); + + public abstract void deleteWarp(TeamWarp teamWarp); + + public abstract List getTeamWarps(T team); + + public abstract Optional getTeamWarp(T team, String name); + + public abstract List getTeamMissions(T team); + + public abstract TeamMission getTeamMission(T team, String missionName); + + public abstract TeamMissionData getTeamMissionData(TeamMission teamMission, int missionIndex); + + public abstract List getTeamMissionData(TeamMission teamMission); + + public abstract void deleteTeamMission(TeamMission teamMission); + + public abstract void deleteTeamMissionData(TeamMission teamMission); + + public void resetTeamMissionData(TeamMission teamMission) { + getTeamMissionData(teamMission).forEach(teamMissionData -> teamMissionData.setProgress(0)); + } + + public List getTeamMission(T team, MissionType missionType) { + // Get list of current missions + List teamMissions = getTeamMissions(team).stream() + .filter(teamMission -> iridiumTeams.getMissions().missions.containsKey(teamMission.getMissionName())) + .filter(teamMission -> iridiumTeams.getMissions().missions.get(teamMission.getMissionName()).getMissionType() == missionType) + .filter(teamMission -> iridiumTeams.getMissions().missions.get(teamMission.getMissionName()).getMissionData().get(teamMission.getMissionLevel()).getItem().slot == null) + .collect(Collectors.toList()); + // Filter and delete expired ones + List missions = new ArrayList<>(); + for (TeamMission teamMission : teamMissions) { + if (teamMission.hasExpired()) { + deleteTeamMission(teamMission); + deleteTeamMissionData(teamMission); + } else { + missions.add(teamMission.getMissionName()); + } + } + + // Fill to make sure list is at correct size + ThreadLocalRandom random = ThreadLocalRandom.current(); + List> availableMissions = iridiumTeams.getMissions().missions.entrySet().stream() + .filter(mission -> !mission.getValue().getMissionData().isEmpty()) + .filter(mission -> mission.getValue().getMissionData().get(1).getItem().slot == null) + .filter(mission -> mission.getValue().getMissionType() == missionType) + .filter(mission -> !missions.contains(mission.getKey())) + .collect(Collectors.toList()); + while (missions.size() < iridiumTeams.getMissions().dailySlots.size() && availableMissions.size() > 0) { + Map.Entry newMission = availableMissions.get(random.nextInt(availableMissions.size())); + missions.add(newMission.getKey()); + availableMissions.remove(newMission); + } + return missions; + } + + public abstract List getTeamRewards(T team); + + public abstract void addTeamReward(TeamReward teamReward); + + public abstract void deleteTeamReward(TeamReward teamReward); + + public synchronized void claimTeamReward(TeamReward teamReward, Player player) { + Reward reward = teamReward.getReward(); + deleteTeamReward(teamReward); + reward.sound.play(player); + iridiumTeams.getEconomy().depositPlayer(player, reward.money); + PlayerUtils.setTotalExperience(player, PlayerUtils.getTotalExperience(player) + reward.experience); + getTeamViaID(teamReward.getTeamID()).ifPresent(team -> { + team.setExperience(team.getExperience() + reward.teamExperience); + for (Map.Entry entry : reward.bankRewards.entrySet()) { + TeamBank teamBank = getTeamBank(team, entry.getKey()); + teamBank.setNumber(teamBank.getNumber() + entry.getValue()); + } + }); + reward.commands.forEach(command -> + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command.replace("%player%", player.getName())) + ); + } + + public void sendTeamTime(Player player) { + getTeamViaPlayerLocation(player).ifPresent(team -> { + TeamSetting teamSetting = getTeamSetting(team, SettingType.TIME.getSettingKey()); + if (teamSetting == null) return; + switch (teamSetting.getValue().toLowerCase()) { + case "sunrise": + setPlayerTime(player, 0, false); + return; + case "day": + setPlayerTime(player, 1000, false); + return; + case "morning": + setPlayerTime(player, 6000, false); + return; + case "noon": + setPlayerTime(player, 9000, false); + return; + case "sunset": + setPlayerTime(player, 12000, false); + return; + case "night": + setPlayerTime(player, 13000, false); + return; + case "midnight": + setPlayerTime(player, 18000, false); + return; + default: + setPlayerTime(player, 0, true); + } + }); + } + + public void sendTeamWeather(Player player) { + getTeamViaPlayerLocation(player).ifPresent(team -> { + TeamSetting teamSetting = getTeamSetting(team, SettingType.WEATHER.getSettingKey()); + if (teamSetting == null) return; + switch (teamSetting.getValue().toLowerCase()) { + case "sunny": + setPlayerWeather(player, WeatherType.CLEAR); + return; + case "raining": + setPlayerWeather(player, WeatherType.DOWNFALL); + return; + default: + player.resetPlayerWeather(); + } + }); + } + + private void setPlayerTime(Player player, long time, boolean relative) { + if (player.isPlayerTimeRelative() != relative || player.getPlayerTime() != time) { + player.setPlayerTime(time, relative); + } + } + + private void setPlayerWeather(Player player, WeatherType weatherType) { + if (player.getPlayerWeather() != weatherType) { + player.setPlayerWeather(weatherType); + } + } + + public boolean teleport(Player player, Location location, T team) { + player.setFallDistance(0); + PaperLib.teleportAsync(player, location); + player.teleport(location); + return true; + } + + public void handleBlockBreakOutsideTerritory(BlockBreakEvent blockEvent) { + // By default do nothing + } + + public void handleBlockPlaceOutsideTerritory(BlockPlaceEvent blockEvent) { + // By default do nothing + } + + public boolean isBankItem(ItemStack item) { + if (item == null || item.getType() == Material.AIR) { + return false; + } + + NBT.get(item, readableItemNBT -> { + return readableItemNBT.hasTag(iridiumTeams.getName().toLowerCase(), NBTType.NBTTagCompound); + }); + + return false; + } + + public enum SortType { + Experience, Value + } } diff --git a/src/main/java/com/iridium/iridiumteams/missions/Mission.java b/src/main/java/com/iridium/iridiumteams/missions/Mission.java new file mode 100644 index 00000000..3c88d110 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/missions/Mission.java @@ -0,0 +1,24 @@ +package com.iridium.iridiumteams.missions; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.Map; + +/** + * Represents an Island mission. + * Serialized in the Configuration files. + */ +@NoArgsConstructor +@Getter +public class Mission { + + Map missionData; + MissionType missionType; + + public Mission(Map missionData, MissionType missionType) { + this.missionData = missionData; + this.missionType = missionType; + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/missions/MissionData.java b/src/main/java/com/iridium/iridiumteams/missions/MissionData.java new file mode 100644 index 00000000..802f4a39 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/missions/MissionData.java @@ -0,0 +1,57 @@ +package com.iridium.iridiumteams.missions; + +import com.cryptomorin.xseries.XSound; +import com.iridium.iridiumcore.Item; +import com.iridium.iridiumteams.Reward; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +/** + * Represents an Island mission. + * Serialized in the Configuration files. + */ +@NoArgsConstructor +@Getter +public class MissionData { + + private Item item; + private List missions; + private int minLevel; + private XSound completeSound; + private Reward reward; + private String message; + private List missionDependencies; + + public MissionData(Item item, List missions, int minLevel, Reward reward, String message) { + this.item = item; + this.missions = missions; + this.minLevel = minLevel; + this.completeSound = XSound.ENTITY_PLAYER_LEVELUP; + this.reward = reward; + this.message = message; + this.missionDependencies = new ArrayList<>(); + } + + public MissionData(Item item, List missions, int minLevel, Reward reward, String message, List missionDependencies) { + this.item = item; + this.missions = missions; + this.minLevel = minLevel; + this.completeSound = XSound.ENTITY_PLAYER_LEVELUP; + this.reward = reward; + this.message = message; + this.missionDependencies = missionDependencies; + } + + + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class MissionDependency { + private String mission; + private int level; + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/missions/MissionType.java b/src/main/java/com/iridium/iridiumteams/missions/MissionType.java new file mode 100644 index 00000000..3db58055 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/missions/MissionType.java @@ -0,0 +1,10 @@ +package com.iridium.iridiumteams.missions; + +public enum MissionType { + + ONCE, + DAILY, + WEEKLY, + INFINITE + +} diff --git a/src/main/java/com/iridium/iridiumteams/placeholders/ClipPlaceholderAPI.java b/src/main/java/com/iridium/iridiumteams/placeholders/ClipPlaceholderAPI.java new file mode 100644 index 00000000..deae4992 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/placeholders/ClipPlaceholderAPI.java @@ -0,0 +1,60 @@ +package com.iridium.iridiumteams.placeholders; + +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; + +import java.util.List; + +public class ClipPlaceholderAPI> extends PlaceholderExpansion { + + private final IridiumTeams iridiumTeams; + private final Placeholders placeholders; + + public ClipPlaceholderAPI(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + this.placeholders = new Placeholders<>(iridiumTeams); + } + + @Override + public boolean persist() { + return true; + } + + @Override + public String getIdentifier() { + return iridiumTeams.getName().toLowerCase(); + } + + @Override + public String getAuthor() { + return "Peaches_MLG"; + } + + @Override + public String getVersion() { + return iridiumTeams.getDescription().getVersion(); + } + + @Override + public String onPlaceholderRequest(Player player, String placeholderKey) { + List placeholderList = placeholders.getPlaceholders(player); + + for (Placeholder placeholder : placeholderList) { + if (formatPlaceholderKey(placeholder.getKey()).equalsIgnoreCase(placeholderKey)) return placeholder.getValue(); + } + + return null; + } + + public int getPlaceholderCount(){ + return placeholders.getDefaultPlaceholders().size(); + } + + private String formatPlaceholderKey(String key){ + return key.replace("%", ""); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/placeholders/Placeholders.java b/src/main/java/com/iridium/iridiumteams/placeholders/Placeholders.java new file mode 100644 index 00000000..9b4a90bb --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/placeholders/Placeholders.java @@ -0,0 +1,59 @@ +package com.iridium.iridiumteams.placeholders; + +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.iridium.iridiumteams.managers.TeamManager; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class Placeholders> { + private final IridiumTeams iridiumTeams; + + public Placeholders(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + public List getDefaultPlaceholders() { + return iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(Optional.empty()); + } + + public List getPlaceholders(@Nullable Player player) { + U user = player == null ? null : iridiumTeams.getUserManager().getUser(player); + Optional team = user == null ? Optional.empty() : iridiumTeams.getTeamManager().getTeamViaID(user.getTeamID()); + Optional current = user == null ? Optional.empty() : iridiumTeams.getTeamManager().getTeamViaPlayerLocation(player); + List topValue = iridiumTeams.getTeamManager().getTeams(TeamManager.SortType.Value, true); + List topExperience = iridiumTeams.getTeamManager().getTeams(TeamManager.SortType.Experience, true); + + List placeholders = new ArrayList<>(); + + placeholders.addAll(iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(team)); + placeholders.addAll(iridiumTeams.getUserPlaceholderBuilder().getPlaceholders(Optional.ofNullable(user))); + for (Placeholder placeholder : iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(current)) { + placeholders.add(new Placeholder("current_" + formatPlaceholderKey(placeholder.getKey()), placeholder.getValue())); + } + + for (int i = 1; i <= 20; i++) { + Optional value = topValue.size() >= i ? Optional.of(topValue.get(i - 1)) : Optional.empty(); + Optional experience = topExperience.size() >= i ? Optional.of(topExperience.get(i - 1)) : Optional.empty(); + for (Placeholder placeholder : iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(value)) { + placeholders.add(new Placeholder("top_value_" + i + "_" + formatPlaceholderKey(placeholder.getKey()), placeholder.getValue())); + } + for (Placeholder placeholder : iridiumTeams.getTeamsPlaceholderBuilder().getPlaceholders(experience)) { + placeholders.add(new Placeholder("top_experience_" + i + "_" + formatPlaceholderKey(placeholder.getKey()), placeholder.getValue())); + } + } + + return placeholders; + } + + private String formatPlaceholderKey(String key) { + return key.replace("%", ""); + } + +} diff --git a/src/main/java/com/iridium/iridiumteams/sorting/TeamSorting.java b/src/main/java/com/iridium/iridiumteams/sorting/TeamSorting.java index 9e567743..971592c2 100644 --- a/src/main/java/com/iridium/iridiumteams/sorting/TeamSorting.java +++ b/src/main/java/com/iridium/iridiumteams/sorting/TeamSorting.java @@ -19,9 +19,4 @@ public abstract class TeamSorting { public abstract List getSortedTeams(IridiumTeams iridiumTeams); - public int getRank(T team, IridiumTeams iridiumTeams) { - List teams = getSortedTeams(iridiumTeams); - return teams.indexOf(team) + 1; - } - } diff --git a/src/main/java/com/iridium/iridiumteams/support/EssentialsSpawnSupport.java b/src/main/java/com/iridium/iridiumteams/support/EssentialsSpawnSupport.java new file mode 100644 index 00000000..9a2fd8df --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/support/EssentialsSpawnSupport.java @@ -0,0 +1,33 @@ +package com.iridium.iridiumteams.support; + +import com.earth2me.essentials.Essentials; +import com.earth2me.essentials.spawn.EssentialsSpawn; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class EssentialsSpawnSupport> implements SpawnSupport { + + private final IridiumTeams iridiumTeams; + + EssentialsSpawn essentialsSpawn = (EssentialsSpawn) Bukkit.getPluginManager().getPlugin("EssentialsSpawn"); + Essentials essentials = (Essentials) Bukkit.getPluginManager().getPlugin("Essentials"); + + public EssentialsSpawnSupport(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + @Override + public String supportProvider() { + return essentialsSpawn.getName(); + } + + @Override + public Location getSpawn(Player player) { + if (essentialsSpawn != null && essentials != null) return essentialsSpawn.getSpawn(essentials.getUser(player).getGroup()); + else return Bukkit.getWorlds().get(0).getSpawnLocation(); + } +} diff --git a/src/main/java/com/iridium/iridiumteams/support/ObsidianStackerSupport.java b/src/main/java/com/iridium/iridiumteams/support/ObsidianStackerSupport.java new file mode 100644 index 00000000..e0481cdc --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/support/ObsidianStackerSupport.java @@ -0,0 +1,68 @@ +package com.iridium.iridiumteams.support; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import com.moyskleytech.obsidianstacker.api.Stack; +import com.moyskleytech.obsidianstacker.api.StackerAPI; +import org.bukkit.Chunk; +import org.bukkit.block.Block; + +import java.util.*; + +public class ObsidianStackerSupport> implements StackerSupport { + + private final IridiumTeams iridiumTeams; + + public ObsidianStackerSupport(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + @Override + public String supportProvider() { + return "ObsidianStacker"; + } + + @Override + public boolean isStackedBlock(Block block) { + Optional stackedBlock = StackerAPI.getInstance().getStack(block); + return stackedBlock.isPresent(); + } + + private Stack getStackedBlock(Block block) { + return StackerAPI.getInstance().getStack(block).get(); + } + + private List getStackedBlocks(List blocks) { + List stackedBlocks = new ArrayList<>(Collections.emptyList()); + for(Block block : blocks) { + stackedBlocks.add(getStackedBlock(block)); + } + return stackedBlocks; + } + + @Override + public int getStackAmount(Block block) { + return getStackedBlock(block).getCount(); + } + + @Override + public Map getBlocksStacked(Chunk chunk, T team) { + HashMap hashMap = new HashMap<>(); + + return hashMap; + } + + @Override + public int getExtraBlocks(T team, XMaterial material, List blocks) { + int stackedBlocks = 0; + for (Stack stack : getStackedBlocks(blocks)) { + if (!iridiumTeams.getTeamManager().isInTeam(team, stack.getEntity().getLocation())) continue; + if (material != XMaterial.matchXMaterial(stack.getEntity().getLocation().getBlock().getType())) continue; + stackedBlocks += (stack.getCount() - 1); + } + + return stackedBlocks; + } +} diff --git a/src/main/java/com/iridium/iridiumteams/support/RoseStackerSupport.java b/src/main/java/com/iridium/iridiumteams/support/RoseStackerSupport.java new file mode 100644 index 00000000..6c947232 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/support/RoseStackerSupport.java @@ -0,0 +1,124 @@ +package com.iridium.iridiumteams.support; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import dev.rosewood.rosestacker.api.RoseStackerAPI; +import dev.rosewood.rosestacker.stack.StackedBlock; +import dev.rosewood.rosestacker.stack.StackedSpawner; +import org.bukkit.Chunk; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; + +import java.util.*; +import java.util.stream.Collectors; + +public class RoseStackerSupport> implements StackerSupport, SpawnerSupport { + + private final IridiumTeams iridiumTeams; + + public RoseStackerSupport(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + @Override + public String supportProvider() { + return "RoseStacker"; + } + + @Override + public boolean isStackedBlock(Block block) { + return RoseStackerAPI.getInstance().isBlockStacked(block); + } + + @Override + public boolean isStackedSpawner(Block block) { + return RoseStackerAPI.getInstance().isSpawnerStacked(block); + } + + private StackedBlock getStackedBlock(Block block) { + return RoseStackerAPI.getInstance().getStackedBlock(block); + } + + private StackedSpawner getStackedSpawner(Block block) { + return RoseStackerAPI.getInstance().getStackedSpawner(block); + } + + private List getStackedBlocks(List blocks) { + List stackedBlocks = new ArrayList<>(Collections.emptyList()); + for(Block block : blocks) { + stackedBlocks.add(getStackedBlock(block)); + } + return stackedBlocks; + } + + private List getStackedSpawners(List spawners) { + List stackedSpawners = new ArrayList<>(Collections.emptyList()); + for(CreatureSpawner spawner : spawners) { + stackedSpawners.add(getStackedSpawner(spawner.getBlock())); + } + return stackedSpawners; + } + + @Override + public int getStackAmount(Block block) { + return getStackedBlock(block).getStackSize(); + } + + @Override + public int getStackAmount(CreatureSpawner spawner) { + return getStackedSpawner(spawner.getBlock()).getStackSize(); + } + + @Override + public int getSpawnAmount(CreatureSpawner spawner) { + return getStackAmount(spawner) * RoseStackerAPI.getInstance().getStackedSpawner(spawner.getBlock()).getSpawner().getSpawnCount(); + } + + @Override + public Map getBlocksStacked(Chunk chunk, T team) { + HashMap hashMap = new HashMap<>(); + + RoseStackerAPI.getInstance().getStackedBlocks(Collections.singletonList(chunk)).forEach(stackedBlock -> { + if(!iridiumTeams.getTeamManager().isInTeam(team, stackedBlock.getLocation())) return; + + XMaterial xMaterial = XMaterial.matchXMaterial(stackedBlock.getStackSettings().getType()); + hashMap.put(xMaterial, hashMap.getOrDefault(xMaterial, 0) + stackedBlock.getStackSize()); + }); + + return hashMap; + } + + @Override + public List getSpawnersStacked(Chunk chunk) { + return RoseStackerAPI.getInstance().getStackedSpawners(Collections.singletonList(chunk)).stream().map(StackedSpawner::getSpawner).collect(Collectors.toList()); + } + + @Override + public int getExtraBlocks(T team, XMaterial material, List blocks) { + + int stackedBlocks = 0; + for (StackedBlock stackedBlock : getStackedBlocks(blocks)) { + if (!iridiumTeams.getTeamManager().isInTeam(team, stackedBlock.getLocation())) continue; + if (material != XMaterial.matchXMaterial(stackedBlock.getBlock().getType())) continue; + stackedBlocks += (stackedBlock.getStackSize() - 1); + } + + return stackedBlocks; + } + + @Override + public int getExtraSpawners(T team, EntityType entityType, List spawners) { + + int stackedSpawners = 0; + for (StackedSpawner stackedSpawner : getStackedSpawners(spawners)) { + if (!iridiumTeams.getTeamManager().isInTeam(team, stackedSpawner.getLocation())) continue; + if (stackedSpawner.getSpawner().getSpawnedType() != entityType) continue; + stackedSpawners += (stackedSpawner.getStackSize() - 1); + } + + return stackedSpawners; + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/support/SpawnSupport.java b/src/main/java/com/iridium/iridiumteams/support/SpawnSupport.java new file mode 100644 index 00000000..6f53171f --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/support/SpawnSupport.java @@ -0,0 +1,10 @@ +package com.iridium.iridiumteams.support; + +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public interface SpawnSupport { + public Location getSpawn(Player player); + public String supportProvider(); +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/support/SpawnerSupport.java b/src/main/java/com/iridium/iridiumteams/support/SpawnerSupport.java new file mode 100644 index 00000000..374c1633 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/support/SpawnerSupport.java @@ -0,0 +1,18 @@ +package com.iridium.iridiumteams.support; + +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Chunk; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; + +import java.util.List; + +public interface SpawnerSupport { + int getExtraSpawners(T team, EntityType entityType, List spawners); + List getSpawnersStacked(Chunk chunk); + boolean isStackedSpawner(Block block); + int getStackAmount(CreatureSpawner spawner); + int getSpawnAmount(CreatureSpawner spawner); + String supportProvider(); +} diff --git a/src/main/java/com/iridium/iridiumteams/support/StackerSupport.java b/src/main/java/com/iridium/iridiumteams/support/StackerSupport.java new file mode 100644 index 00000000..6de3e244 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/support/StackerSupport.java @@ -0,0 +1,17 @@ +package com.iridium.iridiumteams.support; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Chunk; +import org.bukkit.block.Block; + +import java.util.List; +import java.util.Map; + +public interface StackerSupport { + int getExtraBlocks(T team, XMaterial material, List blocks); + Map getBlocksStacked(Chunk chunk, T team); + boolean isStackedBlock(Block block); + int getStackAmount(Block block); + String supportProvider(); +} diff --git a/src/main/java/com/iridium/iridiumteams/support/WildStackerSupport.java b/src/main/java/com/iridium/iridiumteams/support/WildStackerSupport.java new file mode 100644 index 00000000..0077a632 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/support/WildStackerSupport.java @@ -0,0 +1,124 @@ +package com.iridium.iridiumteams.support; + +import com.bgsoftware.wildstacker.api.WildStackerAPI; +import com.bgsoftware.wildstacker.api.objects.StackedBarrel; +import com.bgsoftware.wildstacker.api.objects.StackedSpawner; +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.database.IridiumUser; +import com.iridium.iridiumteams.database.Team; +import org.bukkit.Chunk; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; + +import java.util.*; +import java.util.stream.Collectors; + +public class WildStackerSupport> implements StackerSupport, SpawnerSupport { + + private final IridiumTeams iridiumTeams; + + public WildStackerSupport(IridiumTeams iridiumTeams) { + this.iridiumTeams = iridiumTeams; + } + + @Override + public String supportProvider() { + return "WildStacker"; + } + + @Override + public boolean isStackedBlock(Block block) { + return WildStackerAPI.getWildStacker().getSystemManager().isStackedBarrel(block); + } + + @Override + public boolean isStackedSpawner(Block block) { + return WildStackerAPI.getWildStacker().getSystemManager().isStackedSpawner(block); + } + + private StackedBarrel getStackedBlock(Block block) { + return WildStackerAPI.getWildStacker().getSystemManager().getStackedBarrel(block); + } + + private StackedSpawner getStackedSpawner(Block block) { + return WildStackerAPI.getWildStacker().getSystemManager().getStackedSpawner(block.getLocation()); + } + + private List getStackedBarrels(List blocks) { + List stackedBarrels = new ArrayList<>(Collections.emptyList()); + for (Block block : blocks) { + stackedBarrels.add(getStackedBlock(block)); + } + return stackedBarrels; + } + + private List getStackedSpawners(List spawners) { + List stackedSpawners = new ArrayList<>(Collections.emptyList()); + for (CreatureSpawner spawner : spawners) { + stackedSpawners.add(getStackedSpawner(spawner.getBlock())); + } + return stackedSpawners; + } + + @Override + public int getStackAmount(Block block) { + return WildStackerAPI.getWildStacker().getSystemManager().getStackedBarrel(block).getStackAmount(); + } + + @Override + public int getStackAmount(CreatureSpawner spawner) { + return getStackedSpawner(spawner.getBlock()).getStackAmount(); + } + + @Override + public int getSpawnAmount(CreatureSpawner spawner) { + return getStackAmount(spawner) * WildStackerAPI.getWildStacker().getSystemManager().getStackedSpawner(spawner).getSpawner().getSpawnCount(); + } + + @Override + public Map getBlocksStacked(Chunk chunk, T team) { + HashMap hashMap = new HashMap<>(); + + WildStackerAPI.getWildStacker().getSystemManager().getStackedBarrels(chunk).forEach(stackedBarrel -> { + if (!iridiumTeams.getTeamManager().isInTeam(team, stackedBarrel.getLocation())) return; + + XMaterial xMaterial = XMaterial.matchXMaterial(stackedBarrel.getType()); + hashMap.put(xMaterial, hashMap.getOrDefault(xMaterial, 0) + stackedBarrel.getStackAmount()); + }); + + return hashMap; + } + + @Override + public List getSpawnersStacked(Chunk chunk) { + return WildStackerAPI.getWildStacker().getSystemManager().getStackedSpawners(chunk).stream().map(StackedSpawner::getSpawner).collect(Collectors.toList()); + } + + @Override + public int getExtraBlocks(T team, XMaterial material, List blocks) { + + int stackedBlocks = 0; + for (StackedBarrel stackedBarrel : getStackedBarrels(blocks)) { + if (!iridiumTeams.getTeamManager().isInTeam(team, stackedBarrel.getLocation())) continue; + if (material != XMaterial.matchXMaterial(stackedBarrel.getType())) continue; + stackedBlocks += stackedBarrel.getStackAmount(); + } + + return stackedBlocks; + } + + @Override + public int getExtraSpawners(T team, EntityType entityType, List spawners) { + + int stackedSpawners = 0; + for (StackedSpawner stackedSpawner : getStackedSpawners(spawners)) { + if (!iridiumTeams.getTeamManager().isInTeam(team, stackedSpawner.getLocation())) continue; + if (stackedSpawner.getSpawnedType() != entityType) continue; + stackedSpawners += stackedSpawner.getStackAmount(); + } + + return stackedSpawners; + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/iridiumteams/utils/LocationUtils.java b/src/main/java/com/iridium/iridiumteams/utils/LocationUtils.java new file mode 100644 index 00000000..4fcbafa8 --- /dev/null +++ b/src/main/java/com/iridium/iridiumteams/utils/LocationUtils.java @@ -0,0 +1,44 @@ +package com.iridium.iridiumteams.utils; + +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.IridiumCore; +import com.iridium.iridiumcore.multiversion.MultiVersion; +import com.iridium.iridiumteams.IridiumTeams; +import lombok.Setter; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class LocationUtils { + @Setter + private static boolean isSafeTesting = true; + + private static final List unsafeBlocks = Stream.of( + XMaterial.END_PORTAL, + XMaterial.WATER, + XMaterial.LAVA + ).map(XMaterial::parseMaterial).collect(Collectors.toList()); + + public static boolean isSafe(@NotNull Location location, IridiumTeams iridiumTeams) { + if (IridiumCore.isTesting()) { + boolean safe = isSafeTesting; + isSafeTesting = true; + return safe; + } + Block block = location.getBlock(); + Block above = location.clone().add(0, 1, 0).getBlock(); + Block below = location.clone().subtract(0, 1, 0).getBlock(); + MultiVersion multiVersion = iridiumTeams.getMultiVersion(); + return multiVersion.isPassable(block) && multiVersion.isPassable(above) && !multiVersion.isPassable(below) && !unsafeBlocks.contains(below.getType()) && !unsafeBlocks.contains(block.getType()) && !unsafeBlocks.contains(above.getType()); + } + + public static int getMinHeight(World world) { + return XMaterial.getVersion() >= 17 ? world.getMinHeight() : 0; + } +} diff --git a/src/test/java/com/iridium/iridiumteams/TeamBuilder.java b/src/test/java/com/iridium/iridiumteams/TeamBuilder.java index 7774b10c..22c7654c 100755 --- a/src/test/java/com/iridium/iridiumteams/TeamBuilder.java +++ b/src/test/java/com/iridium/iridiumteams/TeamBuilder.java @@ -1,14 +1,17 @@ package com.iridium.iridiumteams; import be.seeseemelk.mockbukkit.ServerMock; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumteams.database.TeamEnhancement; +import com.iridium.iridiumteams.database.TeamReward; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; import com.iridium.testplugin.managers.TeamManager; +import org.bukkit.Location; import org.bukkit.entity.EntityType; import java.time.LocalDateTime; +import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; public class TeamBuilder { @@ -31,6 +34,30 @@ public TeamBuilder(int id) { TeamManager.teams.add(testTeam); } + public TeamBuilder withReward(Reward... rewards) { + for (Reward reward : rewards) { + TestPlugin.getInstance().getTeamManager().addTeamReward(new TeamReward(testTeam, reward)); + } + return this; + } + + public TeamBuilder withMissions(String... missions) { + for (String mission : missions) { + TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, mission); + } + return this; + } + + public TeamBuilder withWarp(String name, String password, Location location) { + TestPlugin.getInstance().getTeamManager().createWarp(testTeam, UUID.randomUUID(), location, name, password); + return this; + } + + public TeamBuilder withExperience(int experience) { + testTeam.setExperience(experience); + return this; + } + public TeamBuilder withBlocks(XMaterial xMaterial, int amount) { TestPlugin.getInstance().getTeamManager().getTeamBlock(testTeam, xMaterial).setAmount(amount); return this; @@ -58,6 +85,11 @@ public TeamBuilder withEnhancement(String enhancement, int level, LocalDateTime return this; } + public TeamBuilder withBank(String bank, int amount) { + TestPlugin.getInstance().getTeamManager().getTeamBank(testTeam, bank).setNumber(amount); + return this; + } + public TeamBuilder withMembers(int amount, ServerMock serverMock) { for (int i = 0; i < amount; i++) { new UserBuilder(serverMock).withTeam(testTeam).build(); @@ -70,6 +102,11 @@ public TeamBuilder withPermission(int rank, PermissionType permissionType, boole return this; } + public TeamBuilder withSetting(SettingType setting, String value) { + TestPlugin.getInstance().getTeamManager().getTeamSetting(testTeam, setting.getSettingKey()).setValue(value); + return this; + } + public TestTeam build() { return testTeam; } diff --git a/src/test/java/com/iridium/iridiumteams/TemporaryCacheTest.java b/src/test/java/com/iridium/iridiumteams/TemporaryCacheTest.java new file mode 100644 index 00000000..70ed685a --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/TemporaryCacheTest.java @@ -0,0 +1,53 @@ +package com.iridium.iridiumteams; + +import org.junit.jupiter.api.Test; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +class TemporaryCacheTest { + + @Test + public void TemporaryCache_get_ShouldCacheValue() { + TemporaryCache cache = new TemporaryCache<>(); + assertEquals(42, cache.get("key", Duration.ofSeconds(10), () -> 42)); + + int cachedValue = cache.get("key", Duration.ofSeconds(10), () -> { + fail("Supplier should not be called if value is present in cache."); + return 0; + }); + + assertEquals(42, cachedValue); + } + + @Test + public void TemporaryCache_get_ShouldExpireAfterDuration() { + TemporaryCache cache = new TemporaryCache<>(); + cache.get("key", Duration.ofSeconds(-100), () -> 42); + + int cachedValue = cache.get("key", Duration.ofSeconds(10), () -> 69); + + assertEquals(69, cachedValue); + } + + @Test + public void TemporaryCache_get_ShouldCacheDifferentValues() { + TemporaryCache cache = new TemporaryCache<>(); + for (int i = 0; i < 100; i++) { + int finalI = i; + cache.get("key-" + i, Duration.ofSeconds(10), () -> finalI); + } + + for (int i = 0; i < 100; i++) { + int cachedValue = cache.get("key-" + i, Duration.ofSeconds(10), () -> { + fail("Supplier should not be called if value is present in cache."); + return 0; + }); + + assertEquals(i, cachedValue); + } + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/UserBuilder.java b/src/test/java/com/iridium/iridiumteams/UserBuilder.java index ee2fa5f0..62c89f96 100755 --- a/src/test/java/com/iridium/iridiumteams/UserBuilder.java +++ b/src/test/java/com/iridium/iridiumteams/UserBuilder.java @@ -2,6 +2,7 @@ import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumteams.utils.PlayerUtils; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; import com.iridium.testplugin.User; @@ -23,6 +24,11 @@ public UserBuilder(ServerMock serverMock, String playerName) { this.user = TestPlugin.getInstance().getUserManager().getUser(playerMock); } + public UserBuilder withExperience(int experience) { + PlayerUtils.setTotalExperience(playerMock, experience); + return this; + } + public UserBuilder withTeamInvite(TestTeam testTeam) { TestPlugin.getInstance().getTeamManager().createTeamInvite(testTeam, user, user); return this; @@ -33,6 +39,11 @@ public UserBuilder withChatType(String chatType) { return this; } + public UserBuilder withTrust(TestTeam testTeam) { + TestPlugin.getInstance().getTeamManager().createTeamTrust(testTeam, user, user); + return this; + } + public UserBuilder withTeam(TestTeam testTeam) { user.setTeam(testTeam); return this; @@ -55,6 +66,11 @@ public UserBuilder setBypassing() { return this; } + public UserBuilder setOp() { + playerMock.setOp(true); + return this; + } + public PlayerMock build() { return playerMock; } diff --git a/src/test/java/com/iridium/iridiumteams/commands/AboutCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/AboutCommandTest.java index 8f3d12ed..c5a96947 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/AboutCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/AboutCommandTest.java @@ -9,6 +9,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.HashSet; + public class AboutCommandTest { private ServerMock serverMock; @@ -32,6 +34,11 @@ public void executeAboutCommand() { playerMock.assertSaid(StringUtils.color("&7Plugin Version: &c" + TestPlugin.getInstance().getDescription().getVersion())); playerMock.assertSaid(StringUtils.color("&7Plugin Author: &cPeaches_MLG")); playerMock.assertSaid(StringUtils.color("&7Plugin Donations: &cwww.patreon.com/Peaches_MLG")); + + HashSet providerList = TestPlugin.getInstance().getSupportManager().getProviderList(); + if(!providerList.isEmpty()) + playerMock.sendMessage(StringUtils.color("&7Detected Plugins Supported: &c" + String.join(", " + providerList))); + playerMock.assertNoMoreSaid(); } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/BankCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/BankCommandTest.java index 0871498d..6481f291 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/BankCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/BankCommandTest.java @@ -13,6 +13,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; class BankCommandTest { @@ -48,4 +51,147 @@ public void executeBankCommand__Success() { assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof BankGUI); } + @Test + public void executeBankAdminCommand__InvalidSyntax() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test bank give"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().bankCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test bank give "+playerMock.getName()+" experience 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamDoesntExistByName + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__NoPermissions() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test bank give "+playerMock.getName()+" experience 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noPermission + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__InvalidBankItem() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test bank give "+playerMock.getName()+" invalid 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noSuchBankItem + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__NotANumber() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test bank give "+playerMock.getName()+" experience NotANumber"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().notANumber + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__Give() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test bank give "+playerMock.getName()+" experience 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().gaveBank + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", playerMock.getName()) + .replace("%amount%", "100.0") + .replace("%item%", "experience") + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__Remove() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test bank remove "+playerMock.getName()+" experience 100"); + + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().removedBank + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", playerMock.getName()) + .replace("%amount%", "100.0") + .replace("%item%", "experience") + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__Set() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test bank set "+playerMock.getName()+" experience 100"); + + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().setBank + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", playerMock.getName()) + .replace("%amount%", "100.0") + .replace("%item%", "experience") + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBankAdminCommand__unknown() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test bank unknown "+playerMock.getName()+" experience 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().bankCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void tabCompleteBankCommand__NoPermissions(){ + PlayerMock playerMock1 = new UserBuilder(serverMock).build(); + + assertEquals(List.of(), serverMock.getCommandTabComplete(playerMock1, "test bank ")); + } + + @Test + public void tabCompleteBankCommand__WithPermissions(){ + PlayerMock playerMock1 = new UserBuilder(serverMock).setOp().build(); + + assertEquals(List.of("give", "remove", "set"), serverMock.getCommandTabComplete(playerMock1, "test bank ")); + assertEquals(List.of(playerMock1.getName()), serverMock.getCommandTabComplete(playerMock1, "test bank give ")); + assertEquals(List.of("experience", "money"), serverMock.getCommandTabComplete(playerMock1, "test bank give "+playerMock1.getName()+" ")); + assertEquals(List.of("1", "10", "100"), serverMock.getCommandTabComplete(playerMock1, "test bank give "+playerMock1.getName()+" money ")); + } + } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/BlockValueCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/BlockValueCommandTest.java new file mode 100644 index 00000000..2b59f268 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/BlockValueCommandTest.java @@ -0,0 +1,141 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.gui.BlockValueGUI; +import com.iridium.iridiumteams.gui.BlockValuesTypeSelectorGUI; +import com.iridium.iridiumteams.gui.SpawnerValueGUI; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertInstanceOf; + +class BlockValueCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeBlockValueCommand__WithNoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBlockValueCommand__WhenSpecifiedTeamDoesntExist() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues Team1"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamDoesntExistByName + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBlockValueCommand__WithTeam() { + TestTeam testTeam = new TeamBuilder().withSetting(SettingType.VALUE_VISIBILITY, "Private").build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues"); + + playerMock.assertNoMoreSaid(); + assertInstanceOf(BlockValuesTypeSelectorGUI.class, playerMock.getOpenInventory().getTopInventory().getHolder()); + } + + @Test + public void executeBlockValueCommand__WithTeam__Blocks() { + TestTeam testTeam = new TeamBuilder().withSetting(SettingType.VALUE_VISIBILITY, "Private").build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues blocks"); + + playerMock.assertNoMoreSaid(); + assertInstanceOf(BlockValueGUI.class, playerMock.getOpenInventory().getTopInventory().getHolder()); + } + + @Test + public void executeBlockValueCommand__WithTeam__Spawners() { + TestTeam testTeam = new TeamBuilder().withSetting(SettingType.VALUE_VISIBILITY, "Private").build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues spawners"); + + playerMock.assertNoMoreSaid(); + assertInstanceOf(SpawnerValueGUI.class, playerMock.getOpenInventory().getTopInventory().getHolder()); + } + + @Test + public void executeBlockValueCommand__WithoutTeam__Blocks__WhenPrivate() { + TestTeam testTeam = new TeamBuilder("TestTeam").withSetting(SettingType.VALUE_VISIBILITY, "Private").build(); + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues TestTeam blocks"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamIsPrivate + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBlockValueCommand__WithoutTeam__Spawners__WhenPrivate() { + TestTeam testTeam = new TeamBuilder("TestTeam").withSetting(SettingType.VALUE_VISIBILITY, "Private").build(); + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues TestTeam spawners"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamIsPrivate + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeBlockValueCommand__WithoutTeam__Blocks() { + TestTeam testTeam = new TeamBuilder("TestTeam").build(); + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues TestTeam blocks"); + + playerMock.assertNoMoreSaid(); + assertInstanceOf(BlockValueGUI.class, playerMock.getOpenInventory().getTopInventory().getHolder()); + } + + @Test + public void executeBlockValueCommand__WithoutTeam__Spawners() { + TestTeam testTeam = new TeamBuilder("TestTeam").build(); + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test blockvalues TestTeam spawners"); + + playerMock.assertNoMoreSaid(); + assertInstanceOf(SpawnerValueGUI.class, playerMock.getOpenInventory().getTopInventory().getHolder()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/BoostersCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/BoostersCommandTest.java index 0e884a46..ed298250 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/BoostersCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/BoostersCommandTest.java @@ -9,6 +9,7 @@ import com.iridium.iridiumteams.gui.BoostersGUI; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.api.EnhancementUpdateEvent; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -48,7 +49,7 @@ public void executeBoostersCommand__Success() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); serverMock.dispatchCommand(playerMock, "test boosters"); - assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof BoostersGUI); + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof BoostersGUI); } @Test @@ -97,6 +98,27 @@ public void executeBoostersCommand__Buy__NotEnoughMoney() { playerMock.assertNoMoreSaid(); } + @Test + public void executeBoostersCommand__Buy__MaxLevel() { + LocalDateTime currentExpiration = LocalDateTime.now().plusMinutes(1); + TestTeam testTeam = new TeamBuilder().withLevel(50).withEnhancement("farming", 3, currentExpiration).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 100000); + + serverMock.dispatchCommand(playerMock, "test boosters buy farming"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().purchasedBooster + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%booster%", "farming") + )); + playerMock.assertNoMoreSaid(); + + assertEquals(90000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + assertEquals(3, TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "farming").getLevel()); + assertEquals(currentExpiration.plusHours(1), TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "farming").getExpirationTime()); + assertTrue(TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "farming").isActive()); + } + @Test public void executeBoostersCommand__Buy__Success() { TestTeam testTeam = new TeamBuilder().withLevel(5).build(); @@ -114,6 +136,7 @@ public void executeBoostersCommand__Buy__Success() { assertEquals(90000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "farming").getLevel()); assertTrue(TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "farming").isActive()); + assertTrue(EnhancementUpdateEvent.called); } @Test diff --git a/src/test/java/com/iridium/iridiumteams/commands/BypassCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/BypassCommandTest.java index fa50a4af..03ad9afe 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/BypassCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/BypassCommandTest.java @@ -30,7 +30,7 @@ public void tearDown() { } @Test - public void executeBypassCommandPermission() { + public void executeBypassCommand__NoPermission() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test bypass"); @@ -42,7 +42,7 @@ public void executeBypassCommandPermission() { } @Test - public void executeBypassCommandOn() { + public void executeBypassCommand__On() { PlayerMock playerMock = new UserBuilder(serverMock).withPermission("iridiumteams.bypass").build(); User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); @@ -55,7 +55,7 @@ public void executeBypassCommandOn() { } @Test - public void executeBypassCommandOff() { + public void executeBypassCommand__Off() { PlayerMock playerMock = new UserBuilder(serverMock).withPermission("iridiumteams.bypass").setBypassing().build(); User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); diff --git a/src/test/java/com/iridium/iridiumteams/commands/ConfirmableCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/ConfirmableCommandTest.java new file mode 100644 index 00000000..a32dcf4b --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/ConfirmableCommandTest.java @@ -0,0 +1,134 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumteams.IridiumTeams; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.gui.ConfirmationGUI; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; + +import static org.junit.Assert.*; + +public class ConfirmableCommandTest { + private ServerMock serverMock; + private TestConfirmableCommand command; + private IridiumTeams iridiumTeams; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + this.iridiumTeams = TestPlugin.getInstance(); + this.command = new TestConfirmableCommand(true); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void testExecuteWithoutConfirmation() { + TestConfirmableCommand command = new TestConfirmableCommand(false); + PlayerMock playerMock = new UserBuilder(serverMock).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + TestTeam team = new TeamBuilder().build(); + + command.execute(user, team, new String[]{}, iridiumTeams); + + assertTrue(command.isCommandValidCalled); + assertTrue(command.executeAfterConfirmationCalled); + } + + @Test + public void testExecuteWithConfirmation() { + TestConfirmableCommand command = new TestConfirmableCommand(true); + PlayerMock player = new UserBuilder(serverMock).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(player); + TestTeam team = new TeamBuilder().build(); + + command.execute(user, team, new String[]{}, iridiumTeams); + + assertTrue(command.isCommandValidCalled); + + serverMock.getScheduler().performOneTick(); + assertTrue(player.getOpenInventory().getTopInventory().getHolder() instanceof ConfirmationGUI); + + assertFalse(command.executeAfterConfirmationCalled); + } + + @Test + public void testConfirmationGUI_Accept() { + TestConfirmableCommand command = new TestConfirmableCommand(true); + PlayerMock player = new UserBuilder(serverMock).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(player); + TestTeam team = new TeamBuilder().build(); + + command.execute(user, team, new String[]{}, iridiumTeams); + + assertFalse(command.executeAfterConfirmationCalled); + + serverMock.getScheduler().performOneTick(); + + Inventory openInventory = player.getOpenInventory().getTopInventory(); + assertTrue(openInventory.getHolder() instanceof ConfirmationGUI); + + InventoryClickEvent confirmClickEvent = player.simulateInventoryClick(TestPlugin.getInstance().getInventories().confirmationGUI.yes.slot); + assertTrue(confirmClickEvent.isCancelled()); + assertNull(player.getOpenInventory().getTopInventory()); + assertTrue(command.executeAfterConfirmationCalled); + } + + @Test + public void testConfirmationGUI_Deny() { + TestConfirmableCommand command = new TestConfirmableCommand(true); + PlayerMock player = new UserBuilder(serverMock).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(player); + TestTeam team = new TeamBuilder().build(); + + command.execute(user, team, new String[]{}, iridiumTeams); + + assertFalse(command.executeAfterConfirmationCalled); + + serverMock.getScheduler().performOneTick(); + + Inventory openInventory = player.getOpenInventory().getTopInventory(); + assertTrue(openInventory.getHolder() instanceof ConfirmationGUI); + + InventoryClickEvent denyClickEvent = player.simulateInventoryClick(TestPlugin.getInstance().getInventories().confirmationGUI.no.slot); + assertTrue(denyClickEvent.isCancelled()); + assertNull(player.getOpenInventory().getTopInventory()); + assertFalse(command.executeAfterConfirmationCalled); + } + + private class TestConfirmableCommand extends ConfirmableCommand { + boolean isCommandValidCalled = false; + boolean executeAfterConfirmationCalled = false; + + public TestConfirmableCommand(boolean requiresConfirmation) { + super(Collections.emptyList(), "", "", "", 0, requiresConfirmation); + } + + @Override + protected boolean isCommandValid(User user, TestTeam team, String[] arguments, IridiumTeams iridiumTeams) { + isCommandValidCalled = true; + return true; + } + + @Override + protected void executeAfterConfirmation(User user, TestTeam team, String[] arguments, IridiumTeams iridiumTeams) { + executeAfterConfirmationCalled = true; + } + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/CreateCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/CreateCommandTest.java index 7500ca9f..9efa4555 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/CreateCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/CreateCommandTest.java @@ -10,7 +10,6 @@ import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; import com.iridium.testplugin.User; -import com.iridium.testplugin.managers.TeamManager; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -54,6 +53,29 @@ public void executeCreateCommand__AlreadyHaveTeam() { playerMock.assertNoMoreSaid(); } + @Test + public void executeCreateCommand__AlreadyHaveTeam__NoName() { + TestPlugin.getInstance().getConfiguration().createRequiresName = false; + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test create"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().alreadyHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeCreateCommand__RequiresName() { + TestPlugin.getInstance().getConfiguration().createRequiresName = true; + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test create"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().createCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + @Test public void executeCreateCommand__TeamNameTooShort() { PlayerMock playerMock = new UserBuilder(serverMock).build(); @@ -87,18 +109,6 @@ public void executeCreateCommand__TeamNameTaken() { playerMock.assertNoMoreSaid(); } - @Test - public void executeCreateCommand__Canceled() { - PlayerMock playerMock = new UserBuilder(serverMock).build(); - User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); - TeamManager.cancelsCreate = true; - - serverMock.dispatchCommand(playerMock, "test create test"); - - assertEquals(0, user.getUserRank()); - playerMock.assertNoMoreSaid(); - } - @Test public void executeCreateCommand__Success() { PlayerMock playerMock = new UserBuilder(serverMock).build(); diff --git a/src/test/java/com/iridium/iridiumteams/commands/DeleteCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/DeleteCommandTest.java index 641b5b92..c180c98f 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/DeleteCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/DeleteCommandTest.java @@ -10,10 +10,12 @@ import com.iridium.iridiumteams.gui.ConfirmationGUI; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; class DeleteCommandTest { @@ -32,7 +34,7 @@ public void tearDown() { } @Test - public void executeDeleteCommandNoTeam() { + public void executeDeleteCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test delete"); @@ -43,7 +45,7 @@ public void executeDeleteCommandNoTeam() { } @Test - public void executeDeleteCommandNotOwnerOrBypassing() { + public void executeDeleteCommand__NotOwnerOrBypassing() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); @@ -55,7 +57,7 @@ public void executeDeleteCommandNotOwnerOrBypassing() { } @Test - public void executeDeleteCommandOwner() { + public void executeDeleteCommand__Owner() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).withRank(Rank.OWNER.getId()).build(); @@ -65,7 +67,7 @@ public void executeDeleteCommandOwner() { } @Test - public void executeDeleteCommandBypass() { + public void executeDeleteCommand__Bypass() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).setBypassing().build(); @@ -75,7 +77,7 @@ public void executeDeleteCommandBypass() { } @Test - public void executeDeleteCommandExecutes() { + public void executeDeleteCommand__Executes() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).setBypassing().build(); @@ -87,6 +89,53 @@ public void executeDeleteCommandExecutes() { .replace("%player%", playerMock.getName()) )); playerMock.assertNoMoreSaid(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + assertEquals(0, user.getTeamID()); + } + + @Test + public void executeDeleteCommand__Other__NoPermissions() { + PlayerMock adminPlayerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(adminPlayerMock, "test delete unknown"); + adminPlayerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noPermission + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + adminPlayerMock.assertNoMoreSaid(); + } + + @Test + public void executeDeleteCommand__Other__NoTeamFound() { + PlayerMock adminPlayerMock = new UserBuilder(serverMock).setOp().build(); + + serverMock.dispatchCommand(adminPlayerMock, "test delete unknown"); + adminPlayerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamDoesntExistByName + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + adminPlayerMock.assertNoMoreSaid(); + } + + @Test + public void executeDeleteCommand__Other__Executes() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).setBypassing().build(); + PlayerMock adminPlayerMock = new UserBuilder(serverMock).setOp().build(); + + serverMock.dispatchCommand(adminPlayerMock, "test delete " + playerMock.getName()); + assertTrue(adminPlayerMock.getOpenInventory().getTopInventory().getHolder() instanceof ConfirmationGUI); + adminPlayerMock.simulateInventoryClick(TestPlugin.getInstance().getInventories().confirmationGUI.yes.slot); + adminPlayerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().deletedPlayerTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", testTeam.getName()) + )); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamDeleted + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", adminPlayerMock.getName()) + )); + playerMock.assertNoMoreSaid(); + adminPlayerMock.assertNoMoreSaid(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + assertEquals(0, user.getTeamID()); } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/DeleteWarpCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/DeleteWarpCommandTest.java new file mode 100755 index 00000000..7e7ff9c3 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/DeleteWarpCommandTest.java @@ -0,0 +1,126 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.managers.TeamManager; +import org.bukkit.Location; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +class DeleteWarpCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeDeleteWarpCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test deletewarp"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeDeleteWarpCommand__InvalidSyntax() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test deletewarp"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().deleteWarpCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeDeleteWarpCommand__NoPermissions() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test deletewarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotManageWarps + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeDeleteWarpCommand__WarpDoesntExists() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test deletewarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().unknownWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeDeleteWarpCommand__Success() { + TestTeam team = new TeamBuilder().withWarp("name", "", new Location(null, 0, 0, 0)).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test deletewarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().deletedWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", playerMock.getName()) + .replace("%name%", "name") + )); + playerMock.assertNoMoreSaid(); + assertFalse(TestPlugin.getInstance().getTeamManager().getTeamWarp(team, "name").isPresent()); + } + + @Test + public void tabCompleteDeleteWarpCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + assertEquals(Collections.emptyList(), serverMock.getCommandTabComplete(playerMock, "test deletewarp ")); + } + + @Test + public void tabCompleteDeleteWarpCommand__WithWarps() { + TestTeam team = new TeamBuilder().withWarp("warp", "", null).withWarp("name", "", null).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + assertEquals(Arrays.asList("name", "warp"), serverMock.getCommandTabComplete(playerMock, "test deletewarp ")); + } + + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/DemoteCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/DemoteCommandTest.java index f32fa2aa..ffc8c008 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/DemoteCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/DemoteCommandTest.java @@ -66,6 +66,17 @@ public void executeDemoteCommand__UserNotInTeam() { playerMock.assertNoMoreSaid(); } + @Test + public void executeDemoteCommand__CannotDemote_NoPermission() { + TestTeam team = new TeamBuilder().withPermission(8, PermissionType.DEMOTE, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(8).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).withTeam(team).withRank(1).build(); + + serverMock.dispatchCommand(playerMock, "test demote " + otherPlayer.getDisplayName()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotDemoteUser.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + @Test public void executeDemoteCommand__CannotDemote_LowerRank() { TestTeam team = new TeamBuilder().withPermission(8, PermissionType.DEMOTE, true).build(); @@ -78,10 +89,10 @@ public void executeDemoteCommand__CannotDemote_LowerRank() { } @Test - public void executeDemoteCommand__CannotDemote_BelowMember() { + public void executeDemoteCommand__CannotDemote_Owner() { TestTeam team = new TeamBuilder().withPermission(8, PermissionType.DEMOTE, true).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(8).build(); - PlayerMock otherPlayer = new UserBuilder(serverMock).withTeam(team).withRank(1).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).withTeam(team).withRank(Rank.OWNER.getId()).build(); serverMock.dispatchCommand(playerMock, "test demote " + otherPlayer.getDisplayName()); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotDemoteUser.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); @@ -89,8 +100,8 @@ public void executeDemoteCommand__CannotDemote_BelowMember() { } @Test - public void executeDemoteCommand__CannotDemote_NoPermission() { - TestTeam team = new TeamBuilder().withPermission(8, PermissionType.DEMOTE, false).build(); + public void executeDemoteCommand__CannotDemote_BelowMember() { + TestTeam team = new TeamBuilder().withPermission(8, PermissionType.DEMOTE, true).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(8).build(); PlayerMock otherPlayer = new UserBuilder(serverMock).withTeam(team).withRank(1).build(); diff --git a/src/test/java/com/iridium/iridiumteams/commands/DepositCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/DepositCommandTest.java index f54bb122..d8a3ab90 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/DepositCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/DepositCommandTest.java @@ -6,7 +6,6 @@ import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; -import com.iridium.testplugin.TestBankItem; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; import org.junit.jupiter.api.AfterEach; @@ -14,7 +13,6 @@ import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.Collections; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -26,8 +24,6 @@ class DepositCommandTest { public void setup() { this.serverMock = MockBukkit.mock(); MockBukkit.load(TestPlugin.class); - TestPlugin.getInstance().getBankItemList().clear(); - TestPlugin.getInstance().addBankItem(new TestBankItem()); } @AfterEach @@ -71,7 +67,7 @@ public void executeDepositCommand__NotANumber() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); - serverMock.dispatchCommand(playerMock, "test deposit TestBankItem a"); + serverMock.dispatchCommand(playerMock, "test deposit money a"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().notANumber.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); playerMock.assertNoMoreSaid(); } @@ -81,10 +77,10 @@ public void executeDepositCommand__InsufficientFunds() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); - serverMock.dispatchCommand(playerMock, "test deposit TestBankItem 100"); + serverMock.dispatchCommand(playerMock, "test deposit money 100"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().insufficientFundsToDeposit .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) - .replace("%type%", "testBankItem") + .replace("%type%", "money") )); playerMock.assertNoMoreSaid(); } @@ -93,27 +89,28 @@ public void executeDepositCommand__InsufficientFunds() { public void executeDepositCommand__Successful() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); - TestBankItem.playerBalances.put(playerMock.getUniqueId(), 50); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 150.00); - serverMock.dispatchCommand(playerMock, "test deposit TestBankItem 100"); + serverMock.dispatchCommand(playerMock, "test deposit money 100"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().bankDeposited .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) - .replace("%type%", "testBankItem") - .replace("%amount%", "50.0") + .replace("%type%", "money") + .replace("%amount%", "100.0") )); playerMock.assertNoMoreSaid(); - assertEquals(0, TestBankItem.playerBalances.get(playerMock.getUniqueId())); + assertEquals(50.00, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + assertEquals(100, TestPlugin.getInstance().getTeamManager().getTeamBank(team, "money").getNumber()); } @Test public void tabCompleteDepositCommand__BankItem() { PlayerMock playerMock = new UserBuilder(serverMock).build(); - assertEquals(Collections.singletonList("testBankItem"), serverMock.getCommandTabComplete(playerMock, "test deposit ")); + assertEquals(Arrays.asList("experience", "money"), serverMock.getCommandTabComplete(playerMock, "test deposit ")); } @Test public void tabCompleteDepositCommand__Number() { PlayerMock playerMock = new UserBuilder(serverMock).build(); - assertEquals(Arrays.asList("100", "1000", "10000", "100000"), serverMock.getCommandTabComplete(playerMock, "test deposit testBankItem ")); + assertEquals(Arrays.asList("100", "1000", "10000", "100000"), serverMock.getCommandTabComplete(playerMock, "test deposit money ")); } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/DescriptionCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/DescriptionCommandTest.java index 0ea496df..06f14847 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/DescriptionCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/DescriptionCommandTest.java @@ -79,4 +79,26 @@ public void executeDescriptionCommand__Successful() { playerMock.assertNoMoreSaid(); assertEquals(team.getDescription(), "my new awesome description"); } + + @Test + public void executeDescriptionCommand__Other__Executes() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).setBypassing().build(); + PlayerMock adminPlayerMock = new UserBuilder(serverMock).setOp().build(); + + serverMock.dispatchCommand(adminPlayerMock, "test description " + playerMock.getName() + " my new awesome description"); + adminPlayerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().changedPlayerDescription + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", testTeam.getName()) + .replace("%description%", "my new awesome description") + )); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().descriptionChanged + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", adminPlayerMock.getName()) + .replace("%description%", "my new awesome description") + )); + playerMock.assertNoMoreSaid(); + adminPlayerMock.assertNoMoreSaid(); + assertEquals(testTeam.getDescription(), "my new awesome description"); + } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/EditWarpCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/EditWarpCommandTest.java new file mode 100755 index 00000000..922acc31 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/EditWarpCommandTest.java @@ -0,0 +1,220 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.database.TeamWarp; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.managers.TeamManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class EditWarpCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeEditWarpCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test editwarp"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__InvalidSyntax() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test editwarp"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().editWarpCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__NoPermissions() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name icon DIAMOND_BLOCK"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotManageWarps + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__WarpDoesntExists() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name icon material"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().unknownWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__InvalidEdit() { + TestTeam team = new TeamBuilder().withWarp("name", "", null).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name invalid"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().editWarpCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__EditIcon__InvalidSyntax() { + TestTeam team = new TeamBuilder().withWarp("name", "", null).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name icon"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().editWarpCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__EditIcon__UnknownMaterial() { + TestTeam team = new TeamBuilder().withWarp("name", "", null).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name icon material"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noSuchMaterial + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__EditIcon__Success() { + TestTeam team = new TeamBuilder().withWarp("name", "", null).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name icon DIAMOND_BLOCK"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().warpIconSet + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertEquals(XMaterial.DIAMOND_BLOCK, TestPlugin.getInstance().getTeamManager().getTeamWarp(team, "name").map(TeamWarp::getIcon).orElse(XMaterial.AIR)); + } + + @Test + public void executeEditWarpCommand__EditDescription__InvalidSyntax() { + TestTeam team = new TeamBuilder().withWarp("name", "", null).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name description"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().editWarpCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeEditWarpCommand__EditDescription__Success() { + TestTeam team = new TeamBuilder().withWarp("name", "", null).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test editwarp name description My warps description."); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().warpDescriptionSet + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertEquals("My warps description.", TestPlugin.getInstance().getTeamManager().getTeamWarp(team, "name").map(TeamWarp::getDescription).orElse("")); + } + + @Test + public void tabCompleteEditWarpCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + assertEquals(Collections.emptyList(), serverMock.getCommandTabComplete(playerMock, "test editwarp ")); + } + + @Test + public void tabCompleteEditWarpCommand__WithWarps() { + TestTeam team = new TeamBuilder().withWarp("warp", "", null).withWarp("name", "", null).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + assertEquals(Arrays.asList("name", "warp"), serverMock.getCommandTabComplete(playerMock, "test editwarp ")); + } + + @Test + public void tabCompleteEditWarpCommand__EditOptions() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + assertEquals(Arrays.asList("description", "icon"), serverMock.getCommandTabComplete(playerMock, "test editwarp name ")); + } + + @Test + public void tabCompleteEditWarpCommand__MaterialOptions() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + assertTrue(serverMock.getCommandTabComplete(playerMock, "test editwarp name icon ").contains("DIAMOND_BLOCK")); + } + + @Test + public void tabCompleteEditWarpCommand__DescriptionOptions() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + assertEquals(Collections.emptyList(), serverMock.getCommandTabComplete(playerMock, "test editwarp name descriptiopn ")); + } + + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/ExperienceCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/ExperienceCommandTest.java new file mode 100644 index 00000000..f46434ec --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/ExperienceCommandTest.java @@ -0,0 +1,170 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ExperienceCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeExperienceCommand__InvalidSyntax() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test experience invalid synrax"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().experienceCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeExperienceCommand__DefaultsToInfoCommand() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test experience"); + + List placeholderList = TestPlugin.getInstance().getTeamsPlaceholderBuilder().getPlaceholders(testTeam); + playerMock.assertSaid(StringUtils.color(StringUtils.getCenteredMessage(StringUtils.processMultiplePlaceholders(TestPlugin.getInstance().getConfiguration().teamInfoTitle, placeholderList), TestPlugin.getInstance().getConfiguration().teamInfoTitleFiller))); + for (String line : TestPlugin.getInstance().getConfiguration().teamInfo) { + playerMock.assertSaid(StringUtils.color(StringUtils.processMultiplePlaceholders(line, placeholderList))); + } + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeExperienceCommand__NoPermissions() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test experience give "+team.getName()+" 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noPermission + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeExperienceCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).setOp().build(); + + serverMock.dispatchCommand(playerMock, "test experience give "+playerMock.getName()+" 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamDoesntExistByName + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeExperienceCommand__WithTeam__Give() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().build(); + + serverMock.dispatchCommand(playerMock, "test experience give "+team.getName()+" 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().gaveExperience + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", team.getName()) + .replace("%amount%", "100") + )); + playerMock.assertNoMoreSaid(); + assertEquals(100, team.getExperience()); + } + + @Test + public void executeExperienceCommand__WithTeam__Set() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().build(); + team.setExperience(50000); + + serverMock.dispatchCommand(playerMock, "test experience set "+team.getName()+" 100"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().setExperience + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", team.getName()) + .replace("%amount%", "100") + )); + playerMock.assertNoMoreSaid(); + assertEquals(100, team.getExperience()); + } + + @Test + public void executeExperienceCommand__WithTeam__Remove() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().build(); + team.setExperience(100); + + serverMock.dispatchCommand(playerMock, "test experience remove "+team.getName()+" 10"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().removedExperience + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", team.getName()) + .replace("%amount%", "10") + )); + playerMock.assertNoMoreSaid(); + assertEquals(90, team.getExperience()); + } + + @Test + public void executeExperienceCommand__WithTeam__Set__NonNegative() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().build(); + team.setExperience(50000); + + serverMock.dispatchCommand(playerMock, "test experience set "+team.getName()+" -100000"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().setExperience + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", team.getName()) + .replace("%amount%", "0") + )); + playerMock.assertNoMoreSaid(); + assertEquals(0, team.getExperience()); + } + + @Test + public void executeExperienceCommand__WithTeam__Remove__NonNegative() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).setOp().build(); + team.setExperience(100); + + serverMock.dispatchCommand(playerMock, "test experience remove "+team.getName()+" 100000"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().removedExperience + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", team.getName()) + .replace("%amount%", "100") + )); + playerMock.assertNoMoreSaid(); + assertEquals(0, team.getExperience()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/FlyCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/FlyCommandTest.java index 59a98c06..50e07884 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/FlyCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/FlyCommandTest.java @@ -6,6 +6,7 @@ import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.enhancements.EnhancementAffectsType; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; import com.iridium.testplugin.User; @@ -14,7 +15,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.time.LocalDateTime; import java.util.Arrays; +import java.util.Collections; import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; @@ -35,7 +38,7 @@ public void tearDown() { } @Test - public void executeFlyCommand__NoTeam() { + public void executeFlyCommand_ShouldSendMessage_WhenWeDontHaveATeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test fly"); @@ -47,9 +50,10 @@ public void executeFlyCommand__NoTeam() { } @Test - public void executeFlyCommand__NoPermission() { + public void executeFlyCommand_ShouldNotWork_WhenTheBoosterIsNotActive() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); serverMock.dispatchCommand(playerMock, "test fly"); @@ -57,10 +61,65 @@ public void executeFlyCommand__NoPermission() { .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) )); playerMock.assertNoMoreSaid(); + assertFalse(user.isFlying()); + assertFalse(playerMock.isFlying()); + assertFalse(playerMock.getAllowFlight()); } @Test - public void executeFlyCommand__InvalidSyntax() { + public void executeFlyCommand_ShouldMakePlayerFly_WhenTheyHaveFlyAnywherePermission() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withPermission("iridiumteams.fly.anywhere").build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + + serverMock.dispatchCommand(playerMock, "test fly on"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().flightEnabled + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertTrue(user.isFlying()); + assertTrue(playerMock.isFlying()); + assertTrue(playerMock.getAllowFlight()); + } + + @Test + public void executeFlyCommand_ShouldMakePlayerFly_WhenTheyHaveFlyPermissionAndTheyAreInTheirTerritory() { + TestTeam team = new TeamBuilder().build(); + TeamManager.teamViaLocation = Optional.of(team); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withPermission("iridiumteams.fly").build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + + serverMock.dispatchCommand(playerMock, "test fly on"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().flightEnabled + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertTrue(user.isFlying()); + assertTrue(playerMock.isFlying()); + assertTrue(playerMock.getAllowFlight()); + } + + @Test + public void executeFlyCommand_ShouldNotMakePlayerFly_WhenTheyHaveFlyPermissionAndTheyAreNotInTheirTerritory() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withPermission("iridiumteams.fly").build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + + serverMock.dispatchCommand(playerMock, "test fly on"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().flightNotActive + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertFalse(user.isFlying()); + assertFalse(playerMock.isFlying()); + assertFalse(playerMock.getAllowFlight()); + } + + @Test + public void executeFlyCommand_ShouldSendMessage_WhenWeProvideInvalidSyntax() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -73,7 +132,7 @@ public void executeFlyCommand__InvalidSyntax() { } @Test - public void executeFlyCommand__Toggle__Success() { + public void executeFlyCommand_ShouldToggleFlight_WhenWeAreBypassing() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).setBypassing().build(); User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); @@ -100,7 +159,7 @@ public void executeFlyCommand__Toggle__Success() { } @Test - public void executeFlyCommand__On__Success() { + public void executeFlyCommand_ShouldEnableFlight_WhenWeAreBypassing() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).setBypassing().build(); User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); @@ -117,7 +176,7 @@ public void executeFlyCommand__On__Success() { } @Test - public void executeFlyCommand__Off__Success() { + public void executeFlyCommand_ShouldDisableFlight_WhenWeAreBypassing() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).setBypassing().build(); User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); @@ -133,6 +192,70 @@ public void executeFlyCommand__Off__Success() { assertFalse(playerMock.getAllowFlight()); } + @Test + public void executeFlyCommand_ShouldToggleFlight_WhenWeHaveTheFlightBoosterActive() { + LocalDateTime currentExpiration = LocalDateTime.now().plusMinutes(1); + TestTeam team = new TeamBuilder().withEnhancement("flight", 2, currentExpiration).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + + serverMock.dispatchCommand(playerMock, "test fly"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().flightEnabled + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertTrue(user.isFlying()); + assertTrue(playerMock.isFlying()); + assertTrue(playerMock.getAllowFlight()); + + serverMock.dispatchCommand(playerMock, "test fly"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().flightDisabled + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertFalse(user.isFlying()); + assertFalse(playerMock.isFlying()); + assertFalse(playerMock.getAllowFlight()); + } + + @Test + public void executeFlyCommand_ShouldEnableFlight_WhenWeHaveTheFlightBoosterActive() { + LocalDateTime currentExpiration = LocalDateTime.now().plusMinutes(1); + TestTeam team = new TeamBuilder().withEnhancement("flight", 2, currentExpiration).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + + serverMock.dispatchCommand(playerMock, "test fly on"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().flightEnabled + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertTrue(user.isFlying()); + assertTrue(playerMock.isFlying()); + assertTrue(playerMock.getAllowFlight()); + } + + @Test + public void executeFlyCommand_ShouldDisableFlight_WhenWeHaveTheFlightBoosterActive() { + LocalDateTime currentExpiration = LocalDateTime.now().plusMinutes(1); + TestTeam team = new TeamBuilder().withEnhancement("flight", 2, currentExpiration).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + + serverMock.dispatchCommand(playerMock, "test fly off"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().flightDisabled + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertFalse(user.isFlying()); + assertFalse(playerMock.isFlying()); + assertFalse(playerMock.getAllowFlight()); + } + @Test public void canFly__Booster_Not_Active() { TestTeam team = new TeamBuilder().build(); @@ -142,6 +265,7 @@ public void canFly__Booster_Not_Active() { @Test public void canFly__Your_Booster_Active() { + TestPlugin.getInstance().getEnhancements().flightEnhancement.levels.get(1).enhancementAffectsType = Collections.singletonList(EnhancementAffectsType.MEMBERS_ANYWHERE); TestTeam team = new TeamBuilder().withEnhancement("flight", 1).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); assertTrue(TestPlugin.getInstance().getCommands().flyCommand.canFly(playerMock, TestPlugin.getInstance())); @@ -149,6 +273,7 @@ public void canFly__Your_Booster_Active() { @Test public void canFly__Visitors_Booster_Active() { + TestPlugin.getInstance().getEnhancements().flightEnhancement.levels.get(2).enhancementAffectsType = Collections.singletonList(EnhancementAffectsType.VISITORS); TestTeam team = new TeamBuilder().withEnhancement("flight", 2).build(); PlayerMock playerMock = new UserBuilder(serverMock).build(); TeamManager.teamViaLocation = Optional.of(team); diff --git a/src/test/java/com/iridium/iridiumteams/commands/HelpCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/HelpCommandTest.java index a3c564e1..419b51fd 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/HelpCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/HelpCommandTest.java @@ -85,6 +85,6 @@ public void executeHelpCommand__Success__OutOfBounds() { @Test public void helpCommand__TabComplete() { PlayerMock playerMock = new UserBuilder(serverMock).build(); - assertEquals(Arrays.asList("1", "2", "3", "4"), serverMock.getCommandTabComplete(playerMock, "test help ")); + assertEquals(Arrays.asList("1", "2", "3", "4", "5", "6"), serverMock.getCommandTabComplete(playerMock, "test help ")); } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/HomeCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/HomeCommandTest.java index b450faf6..9e7dc5d8 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/HomeCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/HomeCommandTest.java @@ -30,7 +30,7 @@ public void tearDown() { } @Test - public void executeDescriptionCommandNoTeam() { + public void executeHomeCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test home"); @@ -40,7 +40,7 @@ public void executeDescriptionCommandNoTeam() { } @Test - public void executeDescriptionCommandNoHomeSet() { + public void executeHomeCommand__NoHomeSet() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -51,7 +51,7 @@ public void executeDescriptionCommandNoHomeSet() { } @Test - public void executeDescriptionCommandNotInLand() { + public void executeHomeCommand__NotInLand() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -66,7 +66,7 @@ public void executeDescriptionCommandNotInLand() { } @Test - public void executeDescriptionCommandSuccessful() { + public void executeHomeCommand__Successful() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); TeamManager.teamViaLocation = Optional.of(team); diff --git a/src/test/java/com/iridium/iridiumteams/commands/InfoCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/InfoCommandTest.java index 0c7d6d8f..49956512 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/InfoCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/InfoCommandTest.java @@ -34,7 +34,7 @@ public void tearDown() { } @Test - public void executeInfoCommandNoTeam() { + public void executeInfoCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test info"); @@ -46,7 +46,7 @@ public void executeInfoCommandNoTeam() { } @Test - public void executeInfoCommandWithTeam() { + public void executeInfoCommand__WithTeam() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -61,7 +61,7 @@ public void executeInfoCommandWithTeam() { } @Test - public void executeInfoCommandTeamDoesntExist() { + public void executeInfoCommand__TeamDoesntExist() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test info InvalidTeamName"); @@ -73,7 +73,7 @@ public void executeInfoCommandTeamDoesntExist() { } @Test - public void executeInfoCommandWithTeamName() { + public void executeInfoCommand__WithTeamName() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); diff --git a/src/test/java/com/iridium/iridiumteams/commands/InvitesCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/InvitesCommandTest.java index 2eb89752..ab4eabca 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/InvitesCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/InvitesCommandTest.java @@ -31,7 +31,7 @@ public void tearDown() { } @Test - public void executeInvitesCommandNoTeam() { + public void executeInvitesCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test invites"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam @@ -41,7 +41,7 @@ public void executeInvitesCommandNoTeam() { } @Test - public void executeInvitesCommandSuccess() { + public void executeInvitesCommand__Success() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); serverMock.dispatchCommand(playerMock, "test invites"); diff --git a/src/test/java/com/iridium/iridiumteams/commands/JoinCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/JoinCommandTest.java index bb3f5c54..ae0db05d 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/JoinCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/JoinCommandTest.java @@ -4,6 +4,7 @@ import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.SettingType; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; import com.iridium.testplugin.TestPlugin; @@ -79,6 +80,45 @@ public void executeJoinCommand__NoInvite() { playerMock.assertNoMoreSaid(); } + @Test + public void executeJoinCommand__LimitReached() { + TestTeam team = new TeamBuilder().build(); + for (int i = 0; i < 5; i++) { + new UserBuilder(serverMock).withTeam(team).build(); + } + PlayerMock playerMock = new UserBuilder(serverMock).withTeamInvite(team).build(); + + serverMock.dispatchCommand(playerMock, "test join " + team.getName()); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().memberLimitReached + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeJoinCommand__WithPublicTeam() { + TestTeam team = new TeamBuilder().withSetting(SettingType.TEAM_TYPE, "Public").build(); + PlayerMock teamMember = new UserBuilder(serverMock).withTeam(team).build(); + PlayerMock playerMock = new UserBuilder(serverMock).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(playerMock); + + serverMock.dispatchCommand(playerMock, "test join " + team.getName()); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().joinedTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", team.getName()) + )); + playerMock.assertNoMoreSaid(); + teamMember.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().userJoinedTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", playerMock.getName()) + )); + teamMember.assertNoMoreSaid(); + assertEquals(team.getId(), user.getTeamID()); + assertFalse(TestPlugin.getInstance().getTeamManager().getTeamInvite(team, user).isPresent()); + } + @Test public void executeJoinCommand__WithInvite() { TestTeam team = new TeamBuilder().build(); diff --git a/src/test/java/com/iridium/iridiumteams/commands/KickCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/KickCommandTest.java index e7b31e57..7bb01baf 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/KickCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/KickCommandTest.java @@ -90,6 +90,29 @@ public void executeKickCommand__PlayerHigherRank() { playerMock.assertNoMoreSaid(); } + @Test + public void executeKickCommand__CannotKickOwner() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.KICK, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(5).build(); + PlayerMock owner = new UserBuilder(serverMock).withTeam(team).withRank(Rank.OWNER.getId()).build(); + + serverMock.dispatchCommand(playerMock, "test kick " + owner.getName()); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotKickHigherRank.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeKickCommand__PlayerCannotKickSelf() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(Rank.OWNER.getId()).build(); + + serverMock.dispatchCommand(playerMock, "test kick " + playerMock.getName()); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotKickYourself.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + @Test public void executeKickCommand__Successful() { TestTeam team = new TeamBuilder().withPermission(1, PermissionType.KICK, true).build(); diff --git a/src/test/java/com/iridium/iridiumteams/commands/LeaveCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/LeaveCommandTest.java index baabdbba..736f74bf 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/LeaveCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/LeaveCommandTest.java @@ -4,6 +4,7 @@ import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.Rank; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; import com.iridium.testplugin.TestPlugin; @@ -31,7 +32,7 @@ public void tearDown() { } @Test - public void executeLeaveCommandNoTeam() { + public void executeLeaveCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test leave"); @@ -41,7 +42,18 @@ public void executeLeaveCommandNoTeam() { } @Test - public void executeLeaveCommandSuccessful() { + public void executeLeaveCommand__OwnerCannotLeave() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(Rank.OWNER.getId()).build(); + + serverMock.dispatchCommand(playerMock, "test leave"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().ownerCannotLeave.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeLeaveCommand__Successful() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); PlayerMock otherPlayer = new UserBuilder(serverMock).withTeam(team).build(); diff --git a/src/test/java/com/iridium/iridiumteams/commands/LevelCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/LevelCommandTest.java new file mode 100644 index 00000000..872fb4e0 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/LevelCommandTest.java @@ -0,0 +1,98 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class LevelCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeLevelCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test level"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeLevelCommand__WithTeam() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test level"); + + List placeholderList = TestPlugin.getInstance().getTeamsPlaceholderBuilder().getPlaceholders(team); + playerMock.assertSaid(StringUtils.color(StringUtils.getCenteredMessage(StringUtils.processMultiplePlaceholders(TestPlugin.getInstance().getConfiguration().teamInfoTitle, placeholderList), TestPlugin.getInstance().getConfiguration().teamInfoTitleFiller))); + for (String line : TestPlugin.getInstance().getConfiguration().levelInfo) { + playerMock.assertSaid(StringUtils.color(StringUtils.processMultiplePlaceholders(line, placeholderList))); + } + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeLevelCommand__TeamDoesntExist() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test level InvalidTeamName"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamDoesntExistByName + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeLevelCommand__WithTeamName() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test level "+team.getName()); + + List placeholderList = TestPlugin.getInstance().getTeamsPlaceholderBuilder().getPlaceholders(team); + playerMock.assertSaid(StringUtils.color(StringUtils.getCenteredMessage(StringUtils.processMultiplePlaceholders(TestPlugin.getInstance().getConfiguration().teamInfoTitle, placeholderList), TestPlugin.getInstance().getConfiguration().teamInfoTitleFiller))); + for (String line : TestPlugin.getInstance().getConfiguration().levelInfo) { + playerMock.assertSaid(StringUtils.color(StringUtils.processMultiplePlaceholders(line, placeholderList))); + } + playerMock.assertNoMoreSaid(); + } + + @Test + public void tabCompleteInfoCommand(){ + PlayerMock playerMock1 = new UserBuilder(serverMock).build(); + PlayerMock playerMock2 = new UserBuilder(serverMock).build(); + + assertEquals(Arrays.asList(playerMock1.getName(), playerMock2.getName()), serverMock.getCommandTabComplete(playerMock1, "test level ")); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/MembersCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/MembersCommandTest.java index 4af30dc9..4884f7ce 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/MembersCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/MembersCommandTest.java @@ -31,7 +31,7 @@ public void tearDown() { } @Test - public void executeMembersCommandNoTeam() { + public void executeMembersCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test members"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam @@ -41,7 +41,7 @@ public void executeMembersCommandNoTeam() { } @Test - public void executeMembersCommandSuccess() { + public void executeMembersCommand__Success() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); serverMock.dispatchCommand(playerMock, "test members"); diff --git a/src/test/java/com/iridium/iridiumteams/commands/MissionsCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/MissionsCommandTest.java new file mode 100644 index 00000000..6e987542 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/MissionsCommandTest.java @@ -0,0 +1,164 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.configs.inventories.MissionTypeSelectorInventoryConfig; +import com.iridium.iridiumteams.gui.MissionGUI; +import com.iridium.iridiumteams.gui.MissionTypeSelectorGUI; +import com.iridium.iridiumteams.missions.MissionType; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class MissionsCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeMissionsCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test missions"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeMissionsCommand__Daily__Success() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.daily.enabled = true; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Daily"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionGUI); + MissionGUI missionGUI = (MissionGUI) playerMock.getOpenInventory().getTopInventory().getHolder(); + assertEquals(MissionType.DAILY, missionGUI.getMissionType()); + } + + @Test + public void executeMissionsCommand__Daily__Disabled() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.daily.enabled = false; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Daily"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionTypeSelectorGUI); + } + + @Test + public void executeMissionsCommand__Weekly__Success() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.weekly.enabled = true; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Weekly"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionGUI); + MissionGUI missionGUI = (MissionGUI) playerMock.getOpenInventory().getTopInventory().getHolder(); + assertEquals(MissionType.WEEKLY, missionGUI.getMissionType()); + } + + @Test + public void executeMissionsCommand__Weekly__Disabled() { + MissionTypeSelectorInventoryConfig missionTypeSelectorInventoryConfig = TestPlugin.getInstance().getInventories().missionTypeSelectorGUI; + missionTypeSelectorInventoryConfig.weekly.enabled = false; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Weekly"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionTypeSelectorGUI); + } + + @Test + public void executeMissionsCommand__Infinite__Success() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.infinite.enabled = true; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Infinite"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionGUI); + MissionGUI missionGUI = (MissionGUI) playerMock.getOpenInventory().getTopInventory().getHolder(); + assertEquals(MissionType.INFINITE, missionGUI.getMissionType()); + } + + @Test + public void executeMissionsCommand__Infinite__Disabled() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.infinite.enabled = false; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Infinite"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionTypeSelectorGUI); + } + + @Test + public void executeMissionsCommand__Once__Success() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.once.enabled = true; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Once"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionGUI); + MissionGUI missionGUI = (MissionGUI) playerMock.getOpenInventory().getTopInventory().getHolder(); + assertEquals(MissionType.ONCE, missionGUI.getMissionType()); + } + + @Test + public void executeMissionsCommand__Once__Disabled() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.once.enabled = false; + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions Once"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionTypeSelectorGUI); + } + + @Test + public void executeMissionsCommand__Success() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test missions"); + + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof MissionTypeSelectorGUI); + } + + @Test + public void tabCompleteMissionsCommand() { + TestPlugin.getInstance().getInventories().missionTypeSelectorGUI.infinite.enabled = true; + PlayerMock playerMock = new UserBuilder(serverMock).build(); + assertEquals(Arrays.asList("Daily", "Infinite", "Once", "Weekly"), serverMock.getCommandTabComplete(playerMock, "test missions ")); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/PermissionsCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/PermissionsCommandTest.java index 626cc6b7..8d58d00e 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/PermissionsCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/PermissionsCommandTest.java @@ -35,7 +35,7 @@ public void tearDown() { } @Test - public void executePermissionsCommandNoTeam() { + public void executePermissionsCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test permissions"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam @@ -45,7 +45,7 @@ public void executePermissionsCommandNoTeam() { } @Test - public void executePermissionsCommandNoArgsSuccess() { + public void executePermissionsCommand__NoArgsSuccess() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); serverMock.dispatchCommand(playerMock, "test permissions"); @@ -53,7 +53,7 @@ public void executePermissionsCommandNoArgsSuccess() { } @Test - public void executePermissionsCommandWithArgsSuccess() { + public void executePermissionsCommand__WithArgsSuccess() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); serverMock.dispatchCommand(playerMock, "test permissions Member"); @@ -61,7 +61,7 @@ public void executePermissionsCommandWithArgsSuccess() { } @Test - public void executePermissionsCommandWithInvalidArgs() { + public void executePermissionsCommand__WithInvalidArgs() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); serverMock.dispatchCommand(playerMock, "test permissions InvalidRank"); diff --git a/src/test/java/com/iridium/iridiumteams/commands/PromoteCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/PromoteCommandTest.java index a3e4312c..6f487d11 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/PromoteCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/PromoteCommandTest.java @@ -88,6 +88,17 @@ public void executePromoteCommand__CannotPromote_HigherRank() { playerMock.assertNoMoreSaid(); } + @Test + public void executeDemoteCommand__CannotPromote_Owner() { + TestTeam team = new TeamBuilder().withPermission(8, PermissionType.PROMOTE, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(8).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).withTeam(team).withRank(Rank.OWNER.getId()).build(); + + serverMock.dispatchCommand(playerMock, "test promote " + otherPlayer.getDisplayName()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotPromoteUser.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + @Test public void executePromoteCommand__Successful() { TestTeam team = new TeamBuilder().withPermission(8, PermissionType.PROMOTE, true).build(); diff --git a/src/test/java/com/iridium/iridiumteams/commands/ReloadCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/ReloadCommandTest.java index 31c15850..172ec0fe 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/ReloadCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/ReloadCommandTest.java @@ -26,7 +26,7 @@ public void tearDown() { } @Test - public void executeReloadCommandNoPermission() { + public void executeReloadCommand__NoPermission() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test reload"); @@ -35,7 +35,7 @@ public void executeReloadCommandNoPermission() { } @Test - public void executeReloadCommandSuccessful() { + public void executeReloadCommand__Successful() { PlayerMock playerMock = new UserBuilder(serverMock).withPermission("iridiumteams.reload").build(); serverMock.dispatchCommand(playerMock, "test reload"); diff --git a/src/test/java/com/iridium/iridiumteams/commands/RenameCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/RenameCommandTest.java index 91999f26..25eb46c9 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/RenameCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/RenameCommandTest.java @@ -30,7 +30,7 @@ public void tearDown() { } @Test - public void executeRenameCommandNoTeam() { + public void executeRenameCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test rename my new awesome name"); @@ -40,7 +40,7 @@ public void executeRenameCommandNoTeam() { } @Test - public void executeRenameCommand__InvalidSyntax() { + public void executeRenameCommand____InvalidSyntax() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -53,7 +53,7 @@ public void executeRenameCommand__InvalidSyntax() { } @Test - public void executeRenameCommand__NoPermission() { + public void executeRenameCommand____NoPermission() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -66,7 +66,7 @@ public void executeRenameCommand__NoPermission() { } @Test - public void executeRenameCommandTeamNameTooShort() { + public void executeRenameCommand__TeamNameTooShort() { TestTeam team = new TeamBuilder().withPermission(1, PermissionType.RENAME, true).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -80,7 +80,7 @@ public void executeRenameCommandTeamNameTooShort() { } @Test - public void executeRenameCommandTeamNameTooLong() { + public void executeRenameCommand__TeamNameTooLong() { TestTeam team = new TeamBuilder().withPermission(1, PermissionType.RENAME, true).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -94,7 +94,7 @@ public void executeRenameCommandTeamNameTooLong() { } @Test - public void executeRenameCommandTeamNameTaken() { + public void executeRenameCommand__TeamNameTaken() { new TeamBuilder("test").build(); TestTeam team = new TeamBuilder().withPermission(1, PermissionType.RENAME, true).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -108,7 +108,7 @@ public void executeRenameCommandTeamNameTaken() { } @Test - public void executeRenameCommand__Successful() { + public void executeRenameCommand____Successful() { TestTeam team = new TeamBuilder().withPermission(1, PermissionType.RENAME, true).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); @@ -121,4 +121,26 @@ public void executeRenameCommand__Successful() { playerMock.assertNoMoreSaid(); assertEquals(team.getName(), "my new awesome name"); } + + @Test + public void executeRenameCommand__Other__Executes() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).setBypassing().build(); + PlayerMock adminPlayerMock = new UserBuilder(serverMock).setOp().build(); + + serverMock.dispatchCommand(adminPlayerMock, "test rename " + playerMock.getName() + " my new awesome name"); + adminPlayerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().changedPlayerName + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", "my new awesome name") + .replace("%player%", playerMock.getName()) + )); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().nameChanged + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", adminPlayerMock.getName()) + .replace("%name%", "my new awesome name") + )); + playerMock.assertNoMoreSaid(); + adminPlayerMock.assertNoMoreSaid(); + assertEquals(testTeam.getName(), "my new awesome name"); + } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/ValueCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/RewardsCommandTest.java old mode 100644 new mode 100755 similarity index 70% rename from src/test/java/com/iridium/iridiumteams/commands/ValueCommandTest.java rename to src/test/java/com/iridium/iridiumteams/commands/RewardsCommandTest.java index cf161ca9..561a5a9a --- a/src/test/java/com/iridium/iridiumteams/commands/ValueCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/RewardsCommandTest.java @@ -6,13 +6,16 @@ import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.gui.RewardsGUI; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -class ValueCommandTest { +import static org.junit.jupiter.api.Assertions.assertTrue; + +class RewardsCommandTest { private ServerMock serverMock; @@ -28,9 +31,9 @@ public void tearDown() { } @Test - public void executeValueCommand__NoTeam() { + public void executeRewardsCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); - serverMock.dispatchCommand(playerMock, "test value"); + serverMock.dispatchCommand(playerMock, "test rewards"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) )); @@ -38,14 +41,11 @@ public void executeValueCommand__NoTeam() { } @Test - public void executeValueCommand__Success() { + public void executeRewardsCommand__Success() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); - serverMock.dispatchCommand(playerMock, "test value"); - playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamValue - .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) - .replace("%value%", "0.0") - )); - playerMock.assertNoMoreSaid(); + serverMock.dispatchCommand(playerMock, "test rewards"); + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof RewardsGUI); } + } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/SetHomeCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/SetHomeCommandTest.java index 6d327b24..8f66f5c0 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/SetHomeCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/SetHomeCommandTest.java @@ -33,7 +33,7 @@ public void tearDown() { } @Test - public void executeDescriptionCommand__NoTeam() { + public void executeSetHomeCommand__NoTeam() { PlayerMock playerMock = new UserBuilder(serverMock).build(); serverMock.dispatchCommand(playerMock, "test sethome"); diff --git a/src/test/java/com/iridium/iridiumteams/commands/SetWarpCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/SetWarpCommandTest.java new file mode 100755 index 00000000..1707f500 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/SetWarpCommandTest.java @@ -0,0 +1,170 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.utils.LocationUtils; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.managers.TeamManager; +import org.bukkit.Location; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SetWarpCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeSetWarpCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test setwarp"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSetWarpCommand__InvalidSyntax() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test setwarp"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().setWarpCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSetWarpCommand__NotSafe() { + LocationUtils.setSafeTesting(false); + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test setwarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().notSafe + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSetWarpCommand__NotInClaim() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + serverMock.dispatchCommand(playerMock, "test setwarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().notInTeamLand + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSetWarpCommand__NoPermissions() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test setwarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotManageWarps + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSetWarpCommand__WarpAlreadyExists() { + TestTeam team = new TeamBuilder() + .withWarp("name", "", new Location(null, 0, 0, 0)) + .withPermission(1, PermissionType.MANAGE_WARPS, true) + .withEnhancement("warps", 2) + .build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test setwarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().warpAlreadyExists + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSetWarpCommand__LimitReached() { + TestTeam team = new TeamBuilder().withWarp("name", "", new Location(null, 0, 0, 0)).withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test setwarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().warpLimitReached + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSetWarpCommand__Success() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test setwarp name"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().createdWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", "name") + )); + playerMock.assertNoMoreSaid(); + assertTrue(TestPlugin.getInstance().getTeamManager().getTeamWarp(team, "name").isPresent()); + } + + @Test + public void executeSetWarpCommand__Success__WithPassword() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + serverMock.dispatchCommand(playerMock, "test setwarp name password"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().createdWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", "name") + )); + playerMock.assertNoMoreSaid(); + assertTrue(TestPlugin.getInstance().getTeamManager().getTeamWarp(team, "name").isPresent()); + assertEquals("password", TestPlugin.getInstance().getTeamManager().getTeamWarp(team, "name").get().getPassword()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/SettingsCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/SettingsCommandTest.java new file mode 100644 index 00000000..dad8af52 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/SettingsCommandTest.java @@ -0,0 +1,131 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.gui.SettingsGUI; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SettingsCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeSettingsCommand__InvalidSyntax() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test settings invalid"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().settingsCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSettingsCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test settings"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSettingsCommand__OpensGUI() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test settings"); + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof SettingsGUI); + } + + @Test + public void executeSettingsCommand__NoPermission() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test settings time day"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotChangeSettings + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSettingsCommand__UnknownSetting() { + TestTeam testTeam = new TeamBuilder().withPermission(1, PermissionType.SETTINGS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test settings unknown Enabled"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().invalidSetting + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSettingsCommand__UnknownSettingValue() { + TestTeam testTeam = new TeamBuilder().withPermission(1, PermissionType.SETTINGS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test settings weather unknown"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().invalidSettingValue + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeSettingsCommand__SettingSet() { + TestTeam testTeam = new TeamBuilder().withPermission(1, PermissionType.SETTINGS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test settings time day"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().settingSet + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%setting%", "Time") + .replace("%value%", "Day") + )); + playerMock.assertNoMoreSaid(); + assertEquals("Day", TestPlugin.getInstance().getTeamManager().getTeamSetting(testTeam, SettingType.TIME.getSettingKey()).getValue()); + } + + @Test + public void settingsCommand__TabComplete() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + assertEquals(Arrays.asList("CropTrample", "EntityGrief", "FireSpread", "IceForm", "JoinType", "LeafDecay", "MobSpawning", "Time", "TnTDamage", "ValueVisibility", "Visiting", "Weather"), serverMock.getCommandTabComplete(playerMock, "test settings ")); + + assertEquals(Arrays.asList("Disabled", "Enabled"), serverMock.getCommandTabComplete(playerMock, "test settings IceForm ")); + + assertEquals(Arrays.asList("Raining", "Server", "Sunny"), serverMock.getCommandTabComplete(playerMock, "test settings Weather ")); + + assertEquals(Arrays.asList("Day", "Midnight", "Morning", "Night", "Noon", "Server", "Sunrise", "Sunset"), serverMock.getCommandTabComplete(playerMock, "test settings time ")); + + assertEquals(Arrays.asList("Private", "Public"), serverMock.getCommandTabComplete(playerMock, "test settings JoinType ")); + + assertEquals(Collections.emptyList(), serverMock.getCommandTabComplete(playerMock, "test settings invalid ")); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/ShopCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/ShopCommandTest.java new file mode 100644 index 00000000..e11abf75 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/ShopCommandTest.java @@ -0,0 +1,61 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.gui.ShopCategoryGUI; +import com.iridium.iridiumteams.gui.ShopOverviewGUI; +import com.iridium.testplugin.TestPlugin; +import org.bukkit.inventory.InventoryHolder; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ShopCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeShopCommand__Success() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test shop"); + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof ShopOverviewGUI); + } + + @Test + public void executeShopCommand__InvalidCategory() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test shop invalid"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noShopCategory + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeShopCommand__ValidCategory() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test shop mob drops"); + InventoryHolder inventoryHolder = playerMock.getOpenInventory().getTopInventory().getHolder(); + assertTrue(inventoryHolder instanceof ShopCategoryGUI); + ShopCategoryGUI shopCategoryGUI = (ShopCategoryGUI) inventoryHolder; + assertEquals("Mob Drops", shopCategoryGUI.getCategoryName()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/TrustCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/TrustCommandTest.java new file mode 100755 index 00000000..0274d8ff --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/TrustCommandTest.java @@ -0,0 +1,129 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class TrustCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeTrustCommand__InvalidSyntax() { + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(new TeamBuilder().build()).build(); + + serverMock.dispatchCommand(playerMock, "test trust"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().trustCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeTrustCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test trust Player"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeTrustCommand__NoPermission() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test trust Player"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotTrust.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeTrustCommand__PlayerDoesntExist() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.TRUST, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test trust OtherPlayer"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().notAPlayer.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeTrustCommand__PlayerAlreadyInYourTeam() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.TRUST, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).withTeam(team).build(); + + serverMock.dispatchCommand(playerMock, "test trust " + otherPlayer.getName()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().userAlreadyInTeam.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeTrustCommand__PlayerAlreadyTrusted() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.TRUST, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).build(); + + TestPlugin.getInstance().getTeamManager().createTeamTrust(team, TestPlugin.getInstance().getUserManager().getUser(otherPlayer), TestPlugin.getInstance().getUserManager().getUser(playerMock)); + + serverMock.dispatchCommand(playerMock, "test trust " + otherPlayer.getName()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().trustAlreadyPresent.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeTrustCommand__Successful() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.TRUST, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test trust " + otherPlayer.getName()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamTrustSent + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", otherPlayer.getName()) + )); + playerMock.assertNoMoreSaid(); + otherPlayer.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamTrustReceived + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", playerMock.getName()) + )); + otherPlayer.assertNoMoreSaid(); + assertTrue(TestPlugin.getInstance().getTeamManager().getTeamTrust(team, TestPlugin.getInstance().getUserManager().getUser(otherPlayer)).isPresent()); + } + + @Test + public void tabCompleteTrustCommand(){ + PlayerMock playerMock1 = new UserBuilder(serverMock).build(); + PlayerMock playerMock2 = new UserBuilder(serverMock).build(); + + assertEquals(Arrays.asList(playerMock1.getName(), playerMock2.getName()), serverMock.getCommandTabComplete(playerMock1, "test trust ")); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/TrustsCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/TrustsCommandTest.java new file mode 100755 index 00000000..4ceb2fba --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/TrustsCommandTest.java @@ -0,0 +1,51 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.gui.TrustsGUI; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class TrustsCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeTrustsCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test trusts"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeTrustsCommand__Success() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test trusts"); + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof TrustsGUI); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/UnTrustCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/UnTrustCommandTest.java new file mode 100755 index 00000000..65fb4a0a --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/UnTrustCommandTest.java @@ -0,0 +1,90 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +class UnTrustCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeUnTrustCommand__BadSyntax() { + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(new TeamBuilder().build()).build(); + + serverMock.dispatchCommand(playerMock, "test untrust"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().unTrustCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeUnTrustCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test untrust Player"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeUnTrustCommand__PlayerNoTrust() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).build(); + + serverMock.dispatchCommand(playerMock, "test untrust " + otherPlayer.getName()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noActiveTrust.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeUnTrustCommand__Successful() { + TestTeam team = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + PlayerMock otherPlayer = new UserBuilder(serverMock).withTrust(team).build(); + + serverMock.dispatchCommand(playerMock, "test untrust " + otherPlayer.getName()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamTrustRevoked + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", otherPlayer.getName()) + )); + playerMock.assertNoMoreSaid(); + assertFalse(TestPlugin.getInstance().getTeamManager().getTeamInvite(team, TestPlugin.getInstance().getUserManager().getUser(otherPlayer)).isPresent()); + } + + @Test + public void tabCompleteUnTrustCommand(){ + PlayerMock playerMock1 = new UserBuilder(serverMock).build(); + PlayerMock playerMock2 = new UserBuilder(serverMock).build(); + + assertEquals(Arrays.asList(playerMock1.getName(), playerMock2.getName()), serverMock.getCommandTabComplete(playerMock1, "test untrust ")); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/UpgradesCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/UpgradesCommandTest.java index 471a8cf8..f73f6b44 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/UpgradesCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/UpgradesCommandTest.java @@ -9,6 +9,7 @@ import com.iridium.iridiumteams.gui.UpgradesGUI; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.api.EnhancementUpdateEvent; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -95,6 +96,24 @@ public void executeUpgradesCommand__Buy__NotEnoughMoney() { playerMock.assertNoMoreSaid(); } + @Test + public void executeUpgradesCommand__Buy__MaxLevel() { + TestTeam testTeam = new TeamBuilder().withLevel(50).withEnhancement("haste", 3).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 100000); + + serverMock.dispatchCommand(playerMock, "test upgrades buy haste"); + + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().maxUpgradeLevelReached + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%booster%", "farming") + )); + playerMock.assertNoMoreSaid(); + + assertEquals(100000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + assertEquals(3, TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "haste").getLevel()); + } + @Test public void executeUpgradesCommand__Buy__Success() { TestTeam testTeam = new TeamBuilder().withLevel(5).build(); @@ -112,6 +131,7 @@ public void executeUpgradesCommand__Buy__Success() { assertEquals(90000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "haste").getLevel()); assertTrue(TestPlugin.getInstance().getTeamManager().getTeamEnhancement(testTeam, "haste").isActive()); + assertTrue(EnhancementUpdateEvent.called); } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/WarpCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/WarpCommandTest.java new file mode 100755 index 00000000..d83e5bee --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/WarpCommandTest.java @@ -0,0 +1,135 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.bukkit.Location; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class WarpCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeWarpCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test warp"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeWarpCommand__InvalidSyntax() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test warp"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().warpCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeWarpCommand__NoWarp() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test warp name"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().unknownWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeWarpCommand__InvalidPassword__NotSpecified() { + TestTeam testTeam = new TeamBuilder().withWarp("name", "password", new Location(null, 0, 0, 0)).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test warp name"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().incorrectPassword + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeWarpCommand__InvalidPassword() { + TestTeam testTeam = new TeamBuilder().withWarp("name", "password", new Location(null, 0, 0, 0)).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test warp name pass"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().incorrectPassword + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeWarpCommand__Success__WithPassword() { + Location location = new Location(null, 100, 0, 100); + TestTeam testTeam = new TeamBuilder().withWarp("name", "password", location).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test warp name password"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teleportingWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", "name") + )); + playerMock.assertNoMoreSaid(); + assertEquals(location, playerMock.getLocation()); + + } + + @Test + public void executeWarpCommand__Success() { + Location location = new Location(null, 100, 0, 100); + TestTeam testTeam = new TeamBuilder().withWarp("name", null, location).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test warp name"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teleportingWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", "name") + )); + playerMock.assertNoMoreSaid(); + assertEquals(location, playerMock.getLocation()); + + } + + @Test + public void tabCompleteWarpCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + assertEquals(Collections.emptyList(), serverMock.getCommandTabComplete(playerMock, "test warp ")); + } + + @Test + public void tabCompleteWarpCommand__WithWarps() { + TestTeam team = new TeamBuilder().withWarp("warp", "", null).withWarp("name", "", null).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + + assertEquals(Arrays.asList("name", "warp"), serverMock.getCommandTabComplete(playerMock, "test warp ")); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/WarpsCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/WarpsCommandTest.java new file mode 100755 index 00000000..28adb8fa --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/commands/WarpsCommandTest.java @@ -0,0 +1,51 @@ +package com.iridium.iridiumteams.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.gui.WarpsGUI; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class WarpsCommandTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void executeWarpsCommand__NoTeam() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + serverMock.dispatchCommand(playerMock, "test warps"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().dontHaveTeam + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void executeWarpsCommand__Success() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + serverMock.dispatchCommand(playerMock, "test warps"); + assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof WarpsGUI); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/commands/WithdrawCommandTest.java b/src/test/java/com/iridium/iridiumteams/commands/WithdrawCommandTest.java index a0ff7bca..1cd27a7b 100755 --- a/src/test/java/com/iridium/iridiumteams/commands/WithdrawCommandTest.java +++ b/src/test/java/com/iridium/iridiumteams/commands/WithdrawCommandTest.java @@ -6,17 +6,13 @@ import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; -import com.iridium.iridiumteams.database.TeamBank; -import com.iridium.testplugin.TestBankItem; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; -import com.iridium.testplugin.managers.TeamManager; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.Collections; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -28,8 +24,6 @@ class WithdrawCommandTest { public void setup() { this.serverMock = MockBukkit.mock(); MockBukkit.load(TestPlugin.class); - TestPlugin.getInstance().getBankItemList().clear(); - TestPlugin.getInstance().addBankItem(new TestBankItem()); } @AfterEach @@ -73,7 +67,7 @@ public void executeWithdrawCommand__NotANumber() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); - serverMock.dispatchCommand(playerMock, "test withdraw TestBankItem a"); + serverMock.dispatchCommand(playerMock, "test withdraw money a"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().notANumber.replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); playerMock.assertNoMoreSaid(); } @@ -83,39 +77,39 @@ public void executeWithdrawCommand__InsufficientFunds() { TestTeam team = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); - serverMock.dispatchCommand(playerMock, "test withdraw TestBankItem 100"); + serverMock.dispatchCommand(playerMock, "test withdraw money 100"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().insufficientFundsToWithdraw .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) - .replace("%type%", "testBankItem") + .replace("%type%", "money") )); playerMock.assertNoMoreSaid(); } @Test public void executeWithdrawCommand__Successful() { - TestTeam team = new TeamBuilder().build(); + TestTeam team = new TeamBuilder().withBank("money", 150).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); - TeamManager.teamBank.put("testBankItem", new TeamBank(team, "testBankItem", 50)); - serverMock.dispatchCommand(playerMock, "test withdraw TestBankItem 100"); + serverMock.dispatchCommand(playerMock, "test withdraw money 100"); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().bankWithdrew .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) - .replace("%type%", "testBankItem") - .replace("%amount%", "50.0") + .replace("%type%", "money") + .replace("%amount%", "100.0") )); playerMock.assertNoMoreSaid(); - assertEquals(50, TestBankItem.playerBalances.get(playerMock.getUniqueId())); + assertEquals(100.00, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + assertEquals(50, TestPlugin.getInstance().getTeamManager().getTeamBank(team, "money").getNumber()); } @Test public void tabCompleteWithdrawCommand__BankItem() { PlayerMock playerMock = new UserBuilder(serverMock).build(); - assertEquals(Collections.singletonList("testBankItem"), serverMock.getCommandTabComplete(playerMock, "test withdraw ")); + assertEquals(Arrays.asList("experience", "money"), serverMock.getCommandTabComplete(playerMock, "test withdraw ")); } @Test public void tabCompleteWithdrawCommand__Number() { PlayerMock playerMock = new UserBuilder(serverMock).build(); - assertEquals(Arrays.asList("100", "1000", "10000", "100000"), serverMock.getCommandTabComplete(playerMock, "test withdraw testBankItem ")); + assertEquals(Arrays.asList("100", "1000", "10000", "100000"), serverMock.getCommandTabComplete(playerMock, "test withdraw money ")); } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/database/TeamTest.java b/src/test/java/com/iridium/iridiumteams/database/TeamTest.java new file mode 100644 index 00000000..5212ddfd --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/database/TeamTest.java @@ -0,0 +1,51 @@ +package com.iridium.iridiumteams.database; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class TeamTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void setExperience_GivesReward_WhenLevelUp() { + TestTeam testTeam = new TeamBuilder().build(); + testTeam.setExperience(10); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamRewards(testTeam).size()); + } + @Test + public void setExperience_DoesntGiveSameRewardTwice() { + TestTeam testTeam = new TeamBuilder().build(); + testTeam.setExperience(10); + testTeam.setExperience(0); + testTeam.setExperience(10); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamRewards(testTeam).size()); + } + @Test + public void setExperience_DoesntGiveReward_OfSameLevel() { + TestTeam testTeam = new TeamBuilder().build(); + testTeam.setExperience(10); + testTeam.setExperience(11); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamRewards(testTeam).size()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/BankGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/BankGUITest.java new file mode 100755 index 00000000..623012fa --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/BankGUITest.java @@ -0,0 +1,143 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.utils.PlayerUtils; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class BankGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(9, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(10, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(11, Material.PAPER) + .put(12, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(13, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(14, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(15, Material.EXPERIENCE_BOTTLE) + .put(16, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(17, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void BankGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().build(); + BankGUI bankGUI = new BankGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = bankGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); + } + } + + @Test + public void BankGUI__LeftClick() { + TestTeam testTeam = new TeamBuilder().withBank("experience", 150).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + BankGUI bankGUI = new BankGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(bankGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 15); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().bankWithdrew + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "100.0") + .replace("%type%", "experience") + )); + playerMock.assertNoMoreSaid(); + assertEquals(50, TestPlugin.getInstance().getTeamManager().getTeamBank(testTeam, "experience").getNumber()); + assertEquals(100, PlayerUtils.getTotalExperience(playerMock)); + } + + @Test + public void BankGUI__ShiftLeftClick() { + TestTeam testTeam = new TeamBuilder().withBank("experience", 150).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + BankGUI bankGUI = new BankGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(bankGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.SHIFT_LEFT, 15); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().bankWithdrew + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "150.0") + .replace("%type%", "experience") + )); + playerMock.assertNoMoreSaid(); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamBank(testTeam, "experience").getNumber()); + assertEquals(150, PlayerUtils.getTotalExperience(playerMock)); + } + + @Test + public void BankGUI__RightClick() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withExperience(150).withTeam(testTeam).build(); + + BankGUI bankGUI = new BankGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(bankGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.RIGHT, 15); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().bankDeposited + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "100.0") + .replace("%type%", "experience") + )); + playerMock.assertNoMoreSaid(); + assertEquals(100, TestPlugin.getInstance().getTeamManager().getTeamBank(testTeam, "experience").getNumber()); + assertEquals(50, PlayerUtils.getTotalExperience(playerMock)); + } + + @Test + public void BankGUI__ShiftRightClick() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withExperience(150).withTeam(testTeam).build(); + + BankGUI bankGUI = new BankGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(bankGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.SHIFT_RIGHT, 15); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().bankDeposited + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "150.0") + .replace("%type%", "experience") + )); + playerMock.assertNoMoreSaid(); + assertEquals(150, TestPlugin.getInstance().getTeamManager().getTeamBank(testTeam, "experience").getNumber()); + assertEquals(0, PlayerUtils.getTotalExperience(playerMock)); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/BoostersGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/BoostersGUITest.java new file mode 100755 index 00000000..0703eadb --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/BoostersGUITest.java @@ -0,0 +1,80 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class BoostersGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(9, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(10, Material.WHEAT) + .put(11, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(12, Material.SPAWNER) + .put(13, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(14, Material.EXPERIENCE_BOTTLE) + .put(15, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(16, Material.FEATHER) + .put(17, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void BoostersGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().build(); + BoostersGUI boostersGUI = new BoostersGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = boostersGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); + } + } + + @Test + public void BoostersGUI__Click() { + TestTeam testTeam = new TeamBuilder().withExperience(125).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 10000); + + BoostersGUI boostersGUI = new BoostersGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(boostersGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 16); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().purchasedBooster + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%booster%", "flight") + )); + playerMock.assertNoMoreSaid(); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/ConfirmationGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/ConfirmationGUITest.java new file mode 100755 index 00000000..0b2c6cda --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/ConfirmationGUITest.java @@ -0,0 +1,89 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestRunnable; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class ConfirmationGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(9, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(10, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(11, Material.RED_STAINED_GLASS_PANE) + .put(12, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(13, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(14, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(15, Material.GREEN_STAINED_GLASS_PANE) + .put(16, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(17, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void ConfirmationGUI__HasItems() { + ConfirmationGUI confirmationGUI = new ConfirmationGUI<>(() -> { + }, TestPlugin.getInstance()); + Inventory inventory = confirmationGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); + } + } + + @Test + public void ConfirmationGUI__Confirm() { + TestRunnable runnable = new TestRunnable(); + + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + ConfirmationGUI confirmationGUI = new ConfirmationGUI<>(runnable, TestPlugin.getInstance()); + playerMock.openInventory(confirmationGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(15); + + assertTrue(inventoryClickEvent.isCancelled()); + assertNull(playerMock.getOpenInventory().getTopInventory()); + assertTrue(runnable.hasRan()); + } + + @Test + public void ConfirmationGUI__Deny() { + TestRunnable runnable = new TestRunnable(); + + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + ConfirmationGUI confirmationGUI = new ConfirmationGUI<>(runnable, TestPlugin.getInstance()); + playerMock.openInventory(confirmationGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(11); + + assertTrue(inventoryClickEvent.isCancelled()); + assertNull(playerMock.getOpenInventory().getTopInventory()); + assertFalse(runnable.hasRan()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/InventoryConfigGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/InventoryConfigGUITest.java new file mode 100755 index 00000000..2a369c60 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/InventoryConfigGUITest.java @@ -0,0 +1,79 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.cryptomorin.xseries.XMaterial; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.Background; +import com.iridium.iridiumcore.Item; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.configs.inventories.InventoryConfig; +import com.iridium.testplugin.TestPlugin; +import org.bukkit.Material; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class InventoryConfigGUITest { + + private InventoryConfig inventoryConfig; + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(0, Material.DIAMOND_BLOCK) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + inventoryConfig = new InventoryConfig( + 9, + "Title", + new Background(ImmutableMap.builder().build()), + ImmutableMap.builder() + .put("t create", new Item(XMaterial.DIAMOND_BLOCK, 0, 1, "", Collections.emptyList())) + .build() + ); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void InventoryConfigGUI__HasItems() { + InventoryConfigGUI inventoryConfigGUI = new InventoryConfigGUI(inventoryConfig); + Inventory inventory = inventoryConfigGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void InventoryConfigGUI__Click() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + InventoryConfigGUI inventoryConfigGUI = new InventoryConfigGUI(inventoryConfig); + playerMock.openInventory(inventoryConfigGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(0); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getCommands().createCommand.syntax + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/InvitesGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/InvitesGUITest.java index 24fb79b0..7e132bc4 100755 --- a/src/test/java/com/iridium/iridiumteams/gui/InvitesGUITest.java +++ b/src/test/java/com/iridium/iridiumteams/gui/InvitesGUITest.java @@ -3,6 +3,7 @@ import be.seeseemelk.mockbukkit.MockBukkit; import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; @@ -10,19 +11,25 @@ import com.iridium.testplugin.TestTeam; import com.iridium.testplugin.User; import org.bukkit.Material; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.Map; + import static org.junit.jupiter.api.Assertions.*; class InvitesGUITest { + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(0, Material.PLAYER_HEAD) + .put(1, Material.PLAYER_HEAD) + .put(2, Material.PLAYER_HEAD) + .put(3, Material.PLAYER_HEAD) + .put(4, Material.PLAYER_HEAD) + .build(); private ServerMock serverMock; @BeforeEach @@ -35,19 +42,8 @@ public void setup() { public void tearDown() { MockBukkit.unmock(); } - @Test - public void invitesGUIIsEmpty() { - TestTeam testTeam = new TeamBuilder().build(); - InvitesGUI invitesGUI = new InvitesGUI<>(testTeam, null, TestPlugin.getInstance()); - Inventory inventory = invitesGUI.getInventory(); - for (int i = 0; i < inventory.getSize(); i++) { - assertEquals(Material.BLACK_STAINED_GLASS_PANE, inventory.getContents()[i].getType()); - } - } - - @Test - public void invitesGUIHasFivePlayers() { + public void InvitesGUI__HasItems() { TestTeam testTeam = new TeamBuilder().build(); for (int i = 0; i < 5; i++) { User user = TestPlugin.getInstance().getUserManager().getUser(new UserBuilder(serverMock).build()); @@ -55,16 +51,13 @@ public void invitesGUIHasFivePlayers() { } InvitesGUI invitesGUI = new InvitesGUI<>(testTeam, null, TestPlugin.getInstance()); Inventory inventory = invitesGUI.getInventory(); - for (int i = 0; i < 5; i++) { - assertEquals(Material.PLAYER_HEAD, inventory.getContents()[i].getType()); - } - for (int i = 5; i < inventory.getSize(); i++) { - assertEquals(Material.BLACK_STAINED_GLASS_PANE, inventory.getContents()[i].getType()); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); } } @Test - public void invitesGUIInventoryClick() { + public void InvitesGUI__Click() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); User user = TestPlugin.getInstance().getUserManager().getUser(new UserBuilder(serverMock).build()); @@ -73,10 +66,9 @@ public void invitesGUIInventoryClick() { InvitesGUI invitesGUI = new InvitesGUI<>(testTeam, null, TestPlugin.getInstance()); playerMock.openInventory(invitesGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, 0, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(0); + assertTrue(inventoryClickEvent.isCancelled()); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamInviteRevoked .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) .replace("%player%", user.getName()) diff --git a/src/test/java/com/iridium/iridiumteams/gui/MembersGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/MembersGUITest.java index dfa15200..e75e3b34 100755 --- a/src/test/java/com/iridium/iridiumteams/gui/MembersGUITest.java +++ b/src/test/java/com/iridium/iridiumteams/gui/MembersGUITest.java @@ -3,6 +3,7 @@ import be.seeseemelk.mockbukkit.MockBukkit; import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.Rank; import com.iridium.iridiumteams.TeamBuilder; @@ -12,19 +13,26 @@ import com.iridium.testplugin.User; import org.bukkit.Material; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.Map; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; class MembersGUITest { + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(0, Material.PLAYER_HEAD) + .put(1, Material.PLAYER_HEAD) + .put(2, Material.PLAYER_HEAD) + .put(3, Material.PLAYER_HEAD) + .put(4, Material.PLAYER_HEAD) + .build(); private ServerMock serverMock; @BeforeEach @@ -39,81 +47,74 @@ public void tearDown() { } @Test - public void membersGUIIsEmpty() { - TestTeam testTeam = new TeamBuilder().build(); - MembersGUI membersGUI = new MembersGUI<>(testTeam, null, TestPlugin.getInstance()); - Inventory inventory = membersGUI.getInventory(); - for (int i = 0; i < inventory.getSize(); i++) { - assertEquals(Material.BLACK_STAINED_GLASS_PANE, inventory.getContents()[i].getType()); - } - } - - @Test - public void membersGUIHasFivePlayers() { + public void MembersGUI__HasItems() { TestTeam testTeam = new TeamBuilder().withMembers(5, serverMock).build(); MembersGUI membersGUI = new MembersGUI<>(testTeam, null, TestPlugin.getInstance()); Inventory inventory = membersGUI.getInventory(); - for (int i = 0; i < 5; i++) { - assertEquals(Material.PLAYER_HEAD, inventory.getContents()[i].getType()); - } - for (int i = 5; i < inventory.getSize(); i++) { - assertEquals(Material.BLACK_STAINED_GLASS_PANE, inventory.getContents()[i].getType()); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); } } @Test - public void membersGUIInventoryClickDemote() { + public void MembersGUI__LeftClick_Demote() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).withRank(Rank.OWNER.getId()).build(); User user = TestPlugin.getInstance().getUserManager().getUser(new UserBuilder(serverMock).withTeam(testTeam).withRank(2).build()); - TestPlugin.getInstance().getTeamManager().createTeamInvite(testTeam, user, user); MembersGUI membersGUI = new MembersGUI<>(testTeam, null, TestPlugin.getInstance()); playerMock.openInventory(membersGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, 1, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 1); - playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().demotedPlayer.replace("%player%", user.getName()).replace("%rank%", "Member").replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().demotedPlayer + .replace("%player%", user.getName()) + .replace("%rank%", "Member") + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); playerMock.assertNoMoreSaid(); assertEquals(1, user.getUserRank()); } @Test - public void membersGUIInventoryClickKick() { + public void MembersGUI__LeftClick_Kick() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).withRank(Rank.OWNER.getId()).build(); User user = TestPlugin.getInstance().getUserManager().getUser(new UserBuilder(serverMock).withTeam(testTeam).withRank(1).build()); - TestPlugin.getInstance().getTeamManager().createTeamInvite(testTeam, user, user); MembersGUI membersGUI = new MembersGUI<>(testTeam, null, TestPlugin.getInstance()); playerMock.openInventory(membersGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, 1, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 1); - playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().playerKicked.replace("%player%", user.getName()).replace("%kicker%", playerMock.getName()).replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().playerKicked + .replace("%player%", user.getName()) + .replace("%kicker%", playerMock.getName()) + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); playerMock.assertNoMoreSaid(); assertEquals(0, user.getTeamID()); } @Test - public void membersGUIInventoryClickPromote() { + public void MembersGUI__RightClick() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).withRank(Rank.OWNER.getId()).build(); User user = TestPlugin.getInstance().getUserManager().getUser(new UserBuilder(serverMock).withTeam(testTeam).withRank(2).build()); - TestPlugin.getInstance().getTeamManager().createTeamInvite(testTeam, user, user); MembersGUI membersGUI = new MembersGUI<>(testTeam, null, TestPlugin.getInstance()); playerMock.openInventory(membersGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, 1, ClickType.RIGHT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.RIGHT, 1); - playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().promotedPlayer.replace("%player%", user.getName()).replace("%rank%", "CoOwner").replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().promotedPlayer + .replace("%player%", user.getName()) + .replace("%rank%", "CoOwner") + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); playerMock.assertNoMoreSaid(); assertEquals(3, user.getUserRank()); } diff --git a/src/test/java/com/iridium/iridiumteams/gui/MissionsGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/MissionsGUITest.java new file mode 100755 index 00000000..abc9361d --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/MissionsGUITest.java @@ -0,0 +1,71 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.missions.MissionType; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class MissionsGUITest { + + private final Map dailyInventoryLayout = new ImmutableMap.Builder() + .put(9, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(10, Material.SUGAR_CANE) + .put(11, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(12, Material.BONE) + .put(13, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(14, Material.BREAD) + .put(15, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(16, Material.GOLD_ORE) + .put(17, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .build(); + + private final Map onceInventoryLayout = new ImmutableMap.Builder() + .put(0, Material.OAK_LOG) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void DailyMissionsGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().withMissions("farmer", "hunter", "baker", "miner").build(); + MissionGUI missionGUI = new MissionGUI<>(testTeam, MissionType.DAILY, null, TestPlugin.getInstance()); + Inventory inventory = missionGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(dailyInventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void OnceMissionsGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().build(); + MissionGUI missionGUI = new MissionGUI<>(testTeam, MissionType.ONCE, null, TestPlugin.getInstance()); + Inventory inventory = missionGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(onceInventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/PermissionsGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/PermissionsGUITest.java index c4803188..98bbbc30 100755 --- a/src/test/java/com/iridium/iridiumteams/gui/PermissionsGUITest.java +++ b/src/test/java/com/iridium/iridiumteams/gui/PermissionsGUITest.java @@ -3,19 +3,16 @@ import be.seeseemelk.mockbukkit.MockBukkit; import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.cryptomorin.xseries.XMaterial; import com.google.common.collect.ImmutableMap; import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; import com.iridium.iridiumcore.utils.StringUtils; import com.iridium.iridiumteams.*; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; import com.iridium.testplugin.User; import org.bukkit.Material; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -41,16 +38,18 @@ class PermissionsGUITest { .put(16, Material.WRITABLE_BOOK) .put(19, Material.OAK_DOOR) .put(20, Material.DIAMOND) - .put(21, Material.IRON_BOOTS) - .put(22, Material.DIAMOND_SWORD) - .put(23, Material.CHEST) - .put(24, Material.PLAYER_HEAD) - .put(25, Material.REDSTONE) - .put(28, Material.PAPER) - .put(29, Material.WHITE_BED) - .put(30, Material.SPAWNER) - .put(31, Material.GRASS_BLOCK) - .put(32, Material.END_PORTAL_FRAME) + .put(21, Material.EMERALD) + .put(22, Material.IRON_BOOTS) + .put(23, Material.DIAMOND_SWORD) + .put(24, Material.CHEST) + .put(25, Material.PLAYER_HEAD) + .put(28, Material.REDSTONE) + .put(29, Material.PAPER) + .put(30, Material.WHITE_BED) + .put(31, Material.SPAWNER) + .put(32, Material.GUNPOWDER) + .put(33, Material.END_PORTAL_FRAME) + .put(40, Material.OAK_SIGN) //Next and Back Button .put(51, Material.LIME_STAINED_GLASS_PANE) .put(47, Material.RED_STAINED_GLASS_PANE) @@ -68,84 +67,78 @@ public void tearDown() { } @Test - public void permissionsGUIHasPermissions() { + public void PermissionsGUI__HasItems() { TestTeam testTeam = new TeamBuilder().build(); PermissionsGUI permissionsGUI = new PermissionsGUI<>(testTeam, 1, null, TestPlugin.getInstance()); Inventory inventory = permissionsGUI.getInventory(); for (int i = 0; i < inventory.getSize(); i++) { - Material correctType = inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE); - assertEquals(correctType, inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); } } @Test - public void permissionsGUINextPageError() { + public void PermissionsGUI__NextPageError() { PlayerMock playerMock = new UserBuilder(serverMock).build(); TestTeam testTeam = new TeamBuilder().build(); PermissionsGUI permissionsGUI = new PermissionsGUI<>(testTeam, 1, null, TestPlugin.getInstance()); playerMock.openInventory(permissionsGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, TestPlugin.getInstance().getInventories().permissionsGUI.size - 3, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(51); + assertTrue(inventoryClickEvent.isCancelled()); assertEquals(1, permissionsGUI.getPage()); } @Test - public void permissionsGUINextPageSuccess() { + public void PermissionsGUI__NextPageSuccess() { TestPlugin.getInstance().addPermission("test", new Permission(new Item(XMaterial.STONE, 1, 1, "", Collections.emptyList()), 2, 1)); PlayerMock playerMock = new UserBuilder(serverMock).build(); TestTeam testTeam = new TeamBuilder().build(); PermissionsGUI permissionsGUI = new PermissionsGUI<>(testTeam, 1, null, TestPlugin.getInstance()); playerMock.openInventory(permissionsGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, TestPlugin.getInstance().getInventories().permissionsGUI.size - 3, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(51); + assertTrue(inventoryClickEvent.isCancelled()); assertEquals(2, permissionsGUI.getPage()); } @Test - public void permissionsGUIPreviousPageError() { + public void PermissionsGUI__PreviousPageError() { PlayerMock playerMock = new UserBuilder(serverMock).build(); TestTeam testTeam = new TeamBuilder().build(); PermissionsGUI permissionsGUI = new PermissionsGUI<>(testTeam, 1, null, TestPlugin.getInstance()); playerMock.openInventory(permissionsGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, TestPlugin.getInstance().getInventories().permissionsGUI.size - 7, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(47); + assertTrue(inventoryClickEvent.isCancelled()); assertEquals(1, permissionsGUI.getPage()); } @Test - public void permissionsGUIPreviousPageSuccess() { + public void PermissionsGUI__PreviousPageSuccess() { PlayerMock playerMock = new UserBuilder(serverMock).build(); TestTeam testTeam = new TeamBuilder().build(); PermissionsGUI permissionsGUI = new PermissionsGUI<>(testTeam, 1, 2, null, TestPlugin.getInstance()); playerMock.openInventory(permissionsGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, TestPlugin.getInstance().getInventories().permissionsGUI.size - 7, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(47); + assertTrue(inventoryClickEvent.isCancelled()); assertEquals(1, permissionsGUI.getPage()); } @Test - public void permissionsGUICannotChangePermissions() { + public void PermissionsGUI__CannotChangePermissions() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); PermissionsGUI permissionsGUI = new PermissionsGUI<>(testTeam, 1, null, TestPlugin.getInstance()); playerMock.openInventory(permissionsGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, TestPlugin.getInstance().getPermissions().blockBreak.getItem().slot, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getPermissions().blockBreak.getItem().slot); + assertTrue(inventoryClickEvent.isCancelled()); playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotChangePermissions .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) )); @@ -153,17 +146,15 @@ public void permissionsGUICannotChangePermissions() { } @Test - public void permissionsGUISuccessOwner() { + public void PermissionsGUI__SuccessOwner() { TestTeam team = new TeamBuilder().withPermission(1, PermissionType.BLOCK_BREAK, false).build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).withRank(Rank.OWNER.getId()).build(); - PermissionsGUI permissionsGUI = new PermissionsGUI<>(team, 1, null, TestPlugin.getInstance()); + playerMock.openInventory(permissionsGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getPermissions().blockBreak.getItem().slot); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, TestPlugin.getInstance().getPermissions().blockBreak.getItem().slot, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); assertTrue(inventoryClickEvent.isCancelled()); - playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().permissionSet .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) .replace("%permission%", "blockBreak") @@ -175,17 +166,15 @@ public void permissionsGUISuccessOwner() { } @Test - public void permissionsGUISuccess() { + public void PermissionsGUI__Success() { TestTeam testTeam = new TeamBuilder().withPermission(1, PermissionType.BLOCK_BREAK, false).build(); PlayerMock playerMock = new UserBuilder(serverMock).setBypassing().withTeam(testTeam).withRank(2).build(); - PermissionsGUI permissionsGUI = new PermissionsGUI<>(testTeam, 1, null, TestPlugin.getInstance()); + playerMock.openInventory(permissionsGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getPermissions().blockBreak.getItem().slot); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, TestPlugin.getInstance().getPermissions().blockBreak.getItem().slot, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); assertTrue(inventoryClickEvent.isCancelled()); - playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().permissionSet .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) .replace("%permission%", "blockBreak") diff --git a/src/test/java/com/iridium/iridiumteams/gui/RanksGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/RanksGUITest.java index 382d82ae..5903e28e 100755 --- a/src/test/java/com/iridium/iridiumteams/gui/RanksGUITest.java +++ b/src/test/java/com/iridium/iridiumteams/gui/RanksGUITest.java @@ -11,10 +11,7 @@ import com.iridium.testplugin.TestTeam; import com.iridium.testplugin.User; import org.bukkit.Material; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -49,26 +46,25 @@ public void tearDown() { } @Test - public void ranksGUIHasRanks() { + public void RanksGUI__HasItems() { TestTeam testTeam = new TeamBuilder().build(); RanksGUI ranksGUI = new RanksGUI<>(testTeam, null, TestPlugin.getInstance()); Inventory inventory = ranksGUI.getInventory(); for (int i = 0; i < inventory.getSize(); i++) { - assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType()); + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); } } @Test - public void clickingRanksGUIMovesToPermissionsGUI() { + public void RanksGUI__Click() { TestTeam testTeam = new TeamBuilder().build(); PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); RanksGUI ranksGUI = new RanksGUI<>(testTeam, null, TestPlugin.getInstance()); playerMock.openInventory(ranksGUI.getInventory()); - InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(playerMock.getOpenInventory(), InventoryType.SlotType.CONTAINER, 11, ClickType.LEFT, InventoryAction.UNKNOWN); - serverMock.getPluginManager().callEvent(inventoryClickEvent); - assertTrue(inventoryClickEvent.isCancelled()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(11); + assertTrue(inventoryClickEvent.isCancelled()); assertTrue(playerMock.getOpenInventory().getTopInventory().getHolder() instanceof PermissionsGUI); assertEquals(Rank.VISITOR.getId(), ((PermissionsGUI) playerMock.getOpenInventory().getTopInventory().getHolder()).getRank()); } diff --git a/src/test/java/com/iridium/iridiumteams/gui/RewardsGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/RewardsGUITest.java new file mode 100644 index 00000000..cd29f1a2 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/RewardsGUITest.java @@ -0,0 +1,113 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.cryptomorin.xseries.XMaterial; +import com.cryptomorin.xseries.XSound; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.Item; +import com.iridium.iridiumteams.Reward; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.utils.PlayerUtils; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class RewardsGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(0, Material.DIAMOND) + .put(47, Material.RED_STAINED_GLASS_PANE) + .put(51, Material.LIME_STAINED_GLASS_PANE) + .put(53, Material.SUNFLOWER) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void RewardsGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().withReward(new Reward(new Item(XMaterial.DIAMOND, 1, "&c&lReward", Collections.emptyList()), Collections.emptyList(), 1000, new HashMap<>(), 0,10, XSound.ENTITY_PLAYER_LEVELUP)).build(); + RewardsGUI rewardsGUI = new RewardsGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = rewardsGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void RewardsGUI__OnInventoryClick__RedeemReward() { + TestTeam testTeam = new TeamBuilder().withReward(new Reward( + new Item(XMaterial.DIAMOND, 1, "&c&lReward", Collections.emptyList()), Collections.emptyList(), + 1000, new ImmutableMap.Builder().put("money", 10000.00).build(), 1000,1, XSound.ENTITY_PLAYER_LEVELUP + )).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + RewardsGUI rewardsGUI = new RewardsGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(rewardsGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 0); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamRewards(testTeam).size()); + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + assertEquals(1000, PlayerUtils.getTotalExperience(playerMock)); + assertEquals(1000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + assertEquals(10000, TestPlugin.getInstance().getTeamManager().getTeamBank(testTeam, "money").getNumber()); + assertEquals(1, testTeam.getExperience()); + } + + @Test + public void RewardsGUI__OnInventoryClick__RedeemAllRewards() { + TestTeam testTeam = new TeamBuilder().withReward( + new Reward( + new Item(XMaterial.DIAMOND, 1, "&c&lReward", Collections.emptyList()), Collections.emptyList(), + 1000, new ImmutableMap.Builder().put("money", 10000.00).build(), 1000,1, XSound.ENTITY_PLAYER_LEVELUP + ), + new Reward( + new Item(XMaterial.DIAMOND, 1, "&c&lReward", Collections.emptyList()), Collections.emptyList(), + 1000, new ImmutableMap.Builder().put("money", 10000.00).build(), 1000,1, XSound.ENTITY_PLAYER_LEVELUP + ) + ).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + RewardsGUI rewardsGUI = new RewardsGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(rewardsGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 53); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamRewards(testTeam).size()); + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + assertEquals(2000, PlayerUtils.getTotalExperience(playerMock)); + assertEquals(2000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + assertEquals(20000, TestPlugin.getInstance().getTeamManager().getTeamBank(testTeam, "money").getNumber()); + assertEquals(2, testTeam.getExperience()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/SettingsGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/SettingsGUITest.java new file mode 100644 index 00000000..d3c902ab --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/SettingsGUITest.java @@ -0,0 +1,86 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SettingsGUITest { + + private ServerMock serverMock; + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(10, Material.GUNPOWDER) + .put(11, Material.SUNFLOWER) + .put(12, Material.SPAWNER) + .put(13, Material.JUNGLE_LEAVES) + .put(14, Material.ICE) + .put(15, Material.FLINT_AND_STEEL) + .put(16, Material.WHEAT_SEEDS) + .put(19, Material.BLAZE_POWDER) + .put(20, Material.CLOCK) + .put(21, Material.ENDER_PEARL) + .put(22, Material.TNT) + .put(23, Material.BEACON) + .build(); + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void SettingsGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().build(); + SettingsGUI settingsGUI = new SettingsGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = settingsGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void SettingsGUI__OnClick() { + TestTeam testTeam = new TeamBuilder().withPermission(1, PermissionType.SETTINGS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + SettingsGUI settingsGUI = new SettingsGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = settingsGUI.getInventory(); + + playerMock.openInventory(inventory); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(10); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().settingSet + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%setting%", "JoinType") + .replace("%value%", "Public") + )); + playerMock.assertNoMoreSaid(); + assertEquals("Public", TestPlugin.getInstance().getTeamManager().getTeamSetting(testTeam, SettingType.TEAM_TYPE.getSettingKey()).getValue()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/ShopCategoryGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/ShopCategoryGUITest.java new file mode 100644 index 00000000..9dce9d86 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/ShopCategoryGUITest.java @@ -0,0 +1,281 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.cryptomorin.xseries.XMaterial; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.utils.InventoryUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.configs.Shop; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ShopCategoryGUITest { + private final Map inventoryPage1Layout = new ImmutableMap.Builder() + .put(12, Material.BUCKET) + .put(13, Material.WATER_BUCKET) + .put(14, Material.LAVA_BUCKET) + .put(21, Material.NAME_TAG) + .put(22, Material.SADDLE) + .put(23, Material.END_PORTAL_FRAME) + .put(29, Material.RED_STAINED_GLASS_PANE) + .put(33, Material.LIME_STAINED_GLASS_PANE) + .build(); + private final Map inventoryPage2Layout = new ImmutableMap.Builder() + .put(12, Material.DIAMOND) + .put(29, Material.RED_STAINED_GLASS_PANE) + .put(33, Material.LIME_STAINED_GLASS_PANE) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + + TestPlugin.getInstance().getShop().items = ImmutableMap.>builder() + .put("Miscellaneous", Arrays.asList( + new Shop.ShopItem( + "&9&lBucket", + XMaterial.BUCKET, + 1, + 12, + new Shop.Cost(100, new HashMap<>()), + new Shop.Cost(10, new HashMap<>()), + 1 + ), + new Shop.ShopItem( + "&9&lWater Bucket", + XMaterial.WATER_BUCKET, + 1, + 13, + new Shop.Cost(200, new HashMap<>()), + new Shop.Cost(10, new HashMap<>()), + 1 + ), + new Shop.ShopItem( + "&9&lLava Bucket", + XMaterial.LAVA_BUCKET, + 1, + 14, + new Shop.Cost(200, new HashMap<>()), + new Shop.Cost(20, new HashMap<>()), + 1 + ), + new Shop.ShopItem( + "&9&lName Tag", + XMaterial.NAME_TAG, + 1, + 21, + new Shop.Cost(200, new HashMap<>()), + new Shop.Cost(30, new HashMap<>()), + 1 + ), + new Shop.ShopItem( + "&9&lSaddle", + XMaterial.SADDLE, + 1, + 22, + new Shop.Cost(300, new HashMap<>()), + new Shop.Cost(30, new HashMap<>()), + 1 + ), + new Shop.ShopItem( + "&9&lEnd Portal Frame", + XMaterial.END_PORTAL_FRAME, + 1, + 23, + new Shop.Cost(5000, new HashMap<>()), + new Shop.Cost(0, new HashMap<>()), + 1 + ), + new Shop.ShopItem( + "&9&lDiamond", + XMaterial.DIAMOND, + 1, + 12, + 2, + new Shop.Cost(100, new HashMap<>()), + new Shop.Cost(10, new HashMap<>()), + 1 + ) + ) + ) + .build(); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void ShopCategoryGUI_ShouldDisplayItems_OnPage1() { + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 1, TestPlugin.getInstance()); + Inventory inventory = shopCategoryGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryPage1Layout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void ShopCategoryGUI_ShouldDisplayItems_OnPage2() { + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 2, TestPlugin.getInstance()); + Inventory inventory = shopCategoryGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryPage2Layout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void ShopCategoryGUI_ShouldGoToNextPage_WhenNextPageAvailable() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 1, TestPlugin.getInstance()); + + playerMock.openInventory(shopCategoryGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(33); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(2, shopCategoryGUI.getPage()); + for (int i = 0; i < playerMock.getOpenInventory().getTopInventory().getSize(); i++) { + assertEquals(inventoryPage2Layout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), playerMock.getOpenInventory().getTopInventory().getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void ShopCategoryGUI_ShouldStayOnSamePage_WhenNoNextPageAvailable() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 2, TestPlugin.getInstance()); + + playerMock.openInventory(shopCategoryGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(33); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(2, shopCategoryGUI.getPage()); + for (int i = 0; i < playerMock.getOpenInventory().getTopInventory().getSize(); i++) { + assertEquals(inventoryPage2Layout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), playerMock.getOpenInventory().getTopInventory().getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void ShopCategoryGUI_ShouldGoToPreviousPage_WhenPreviousPageAvailable() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 2, TestPlugin.getInstance()); + + playerMock.openInventory(shopCategoryGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(29); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(1, shopCategoryGUI.getPage()); + for (int i = 0; i < playerMock.getOpenInventory().getTopInventory().getSize(); i++) { + assertEquals(inventoryPage1Layout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), playerMock.getOpenInventory().getTopInventory().getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void ShopCategoryGUI_ShouldStayOnSamePage_WhenNoPreviousPageAvailable() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 1, TestPlugin.getInstance()); + + playerMock.openInventory(shopCategoryGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(29); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(1, shopCategoryGUI.getPage()); + for (int i = 0; i < playerMock.getOpenInventory().getTopInventory().getSize(); i++) { + assertEquals(inventoryPage1Layout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), playerMock.getOpenInventory().getTopInventory().getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void ShopCategoryGUI_ShouldBuyItem_OnSamePage() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 10000); + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 1, TestPlugin.getInstance()); + + playerMock.openInventory(shopCategoryGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(12); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().successfullyBought + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "1") + .replace("%item%", StringUtils.color("&9&lBucket")) + .replace("%vault_cost%", "100") + )); + playerMock.assertNoMoreSaid(); + + assertEquals(1, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.BUCKET)); + assertEquals(0, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.DIAMOND)); + assertEquals(9900, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + } + + @Test + public void ShopCategoryGUI_ShouldNotBuyItem_WhenOnDifferentPage() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 10000); + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 2, TestPlugin.getInstance()); + + playerMock.openInventory(shopCategoryGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(13); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + + assertEquals(10000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + } + + @Test + public void ShopCategoryGUI_ShouldBuyItem_OnShiftLeftClick() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 10000); + ShopCategoryGUI shopCategoryGUI = new ShopCategoryGUI<>("Miscellaneous", null, 1, + TestPlugin.getInstance()); + + playerMock.openInventory(shopCategoryGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), + ClickType.SHIFT_LEFT, 12); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().successfullyBought + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "16") + .replace("%item%", StringUtils.color("&9&lBucket")) + .replace("%vault_cost%", "1.6K"))); + playerMock.assertNoMoreSaid(); + + assertEquals(16, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.BUCKET)); + assertEquals(0, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.DIAMOND)); + assertEquals(8400, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/ShopOverviewGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/ShopOverviewGUITest.java new file mode 100644 index 00000000..f0262ad6 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/ShopOverviewGUITest.java @@ -0,0 +1,73 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ShopOverviewGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(12, Material.GRASS_BLOCK) + .put(13, Material.COOKED_CHICKEN) + .put(14, Material.GOLD_INGOT) + .put(21, Material.WHEAT) + .put(22, Material.SPIDER_EYE) + .put(23, Material.SADDLE) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void ShopOverviewGUI__HasItems() { + ShopOverviewGUI upgradesGUI = new ShopOverviewGUI<>(null, TestPlugin.getInstance()); + Inventory inventory = upgradesGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); + } + } + + @Test + public void ShopOverviewGUI__Click() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + ShopOverviewGUI upgradesGUI = new ShopOverviewGUI<>(null, TestPlugin.getInstance()); + + playerMock.openInventory(upgradesGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 12); + + assertTrue(inventoryClickEvent.isCancelled()); + InventoryHolder inventoryHolder = playerMock.getOpenInventory().getTopInventory().getHolder(); + assertTrue(inventoryHolder instanceof ShopCategoryGUI); + ShopCategoryGUI shopCategoryGUI = (ShopCategoryGUI) inventoryHolder; + assertEquals("Blocks", shopCategoryGUI.getCategoryName()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/TopGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/TopGUITest.java new file mode 100644 index 00000000..dcbaade5 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/TopGUITest.java @@ -0,0 +1,166 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.sorting.ExperienceTeamSort; +import com.iridium.iridiumteams.sorting.ValueTeamSort; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class TopGUITest { + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(14, Material.PLAYER_HEAD) + .put(22, Material.BARRIER) + .put(23, Material.BARRIER) + .put(24, Material.BARRIER) + .put(30, Material.BARRIER) + .put(31, Material.BARRIER) + .put(32, Material.BARRIER) + .put(33, Material.BARRIER) + .put(34, Material.BARRIER) + .put(18, Material.DIAMOND) + .put(27, Material.EXPERIENCE_BOTTLE) + .put(51, Material.LIME_STAINED_GLASS_PANE) + .put(47, Material.RED_STAINED_GLASS_PANE) + .build(); + private final Map noPlayersInventoryLayout = new ImmutableMap.Builder() + .put(14, Material.BARRIER) + .put(22, Material.BARRIER) + .put(23, Material.BARRIER) + .put(24, Material.BARRIER) + .put(30, Material.BARRIER) + .put(31, Material.BARRIER) + .put(32, Material.BARRIER) + .put(33, Material.BARRIER) + .put(34, Material.BARRIER) + .put(18, Material.DIAMOND) + .put(27, Material.EXPERIENCE_BOTTLE) + .put(51, Material.LIME_STAINED_GLASS_PANE) + .put(47, Material.RED_STAINED_GLASS_PANE) + .build(); + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void TopGUI__HasItems() { + new TeamBuilder().build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().valueTeamSort, null, TestPlugin.getInstance()); + Inventory inventory = topGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void TopGUI__HidesPrivateValues() { + new TeamBuilder().withSetting(SettingType.VALUE_VISIBILITY, "Private").build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().valueTeamSort, null, TestPlugin.getInstance()); + Inventory inventory = topGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(noPlayersInventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void TopGUI__Click_SortValue() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().experienceTeamSort, null, TestPlugin.getInstance()); + playerMock.openInventory(topGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getTop().valueTeamSort.item.slot); + + assertTrue(inventoryClickEvent.isCancelled()); + assertTrue(topGUI.getSortingType() instanceof ValueTeamSort); + } + + @Test + public void topGUI__SortExperience() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().valueTeamSort, null, TestPlugin.getInstance()); + playerMock.openInventory(topGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getTop().experienceTeamSort.item.slot); + + assertTrue(inventoryClickEvent.isCancelled()); + assertTrue(topGUI.getSortingType() instanceof ExperienceTeamSort); + } + + @Test + public void topGUI__PreviousPage__Error() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().experienceTeamSort, null, TestPlugin.getInstance()); + playerMock.openInventory(topGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getInventories().topGUI.size - 7); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(1, topGUI.getPage()); + } + + @Test + public void topGUI__PreviousPage__Success() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().experienceTeamSort, null, TestPlugin.getInstance()); + topGUI.setPage(2); + playerMock.openInventory(topGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getInventories().topGUI.size - 7); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(1, topGUI.getPage()); + } + + @Test + public void topGUI__NextPage__Error() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().experienceTeamSort, null, TestPlugin.getInstance()); + playerMock.openInventory(topGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getInventories().topGUI.size - 3); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(1, topGUI.getPage()); + } + + @Test + public void topGUI__NextPage__Success() { + for (int i = 0; i < 10; i++) { + new TeamBuilder().build(); + } + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TopGUI topGUI = new TopGUI<>(TestPlugin.getInstance().getTop().experienceTeamSort, null, TestPlugin.getInstance()); + playerMock.openInventory(topGUI.getInventory()); + + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(TestPlugin.getInstance().getInventories().topGUI.size - 3); + + assertTrue(inventoryClickEvent.isCancelled()); + assertEquals(2, topGUI.getPage()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/TrustsGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/TrustsGUITest.java new file mode 100755 index 00000000..ec0500d4 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/TrustsGUITest.java @@ -0,0 +1,79 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class TrustsGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(0, Material.PLAYER_HEAD) + .put(1, Material.PLAYER_HEAD) + .put(2, Material.PLAYER_HEAD) + .put(3, Material.PLAYER_HEAD) + .put(4, Material.PLAYER_HEAD) + .build(); + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void TrustsGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().build(); + for (int i = 0; i < 5; i++) { + new UserBuilder(serverMock).withTrust(testTeam).build(); + } + TrustsGUI trustsGUI = new TrustsGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = trustsGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void TrustsGUI__Click() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + PlayerMock target = new UserBuilder(serverMock).withTrust(testTeam).build(); + User user = TestPlugin.getInstance().getUserManager().getUser(target); + + TrustsGUI trustsGUI = new TrustsGUI<>(testTeam, null, TestPlugin.getInstance()); + + playerMock.openInventory(trustsGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(0); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teamTrustRevoked + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", target.getName()) + )); + playerMock.assertNoMoreSaid(); + assertFalse(TestPlugin.getInstance().getTeamManager().getTeamInvite(testTeam, user).isPresent()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/UpgradesGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/UpgradesGUITest.java new file mode 100755 index 00000000..8d9abb77 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/UpgradesGUITest.java @@ -0,0 +1,80 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Material; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class UpgradesGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(9, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(10, Material.DIAMOND_PICKAXE) + .put(11, Material.PLAYER_HEAD) + .put(12, Material.SUGAR) + .put(13, Material.END_PORTAL_FRAME) + .put(14, Material.FEATHER) + .put(15, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(16, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(17, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void UpgradesGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().build(); + UpgradesGUI upgradesGUI = new UpgradesGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = upgradesGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(),"Item on slot " + i + " not as expected"); + } + } + + @Test + public void UpgradesGUI__Click() { + TestTeam testTeam = new TeamBuilder().withExperience(125).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 10000); + UpgradesGUI upgradesGUI = new UpgradesGUI<>(testTeam, null, TestPlugin.getInstance()); + + playerMock.openInventory(upgradesGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 10); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().purchasedUpgrade + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%upgrade%", "haste") + )); + playerMock.assertNoMoreSaid(); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/gui/WarpsGUITest.java b/src/test/java/com/iridium/iridiumteams/gui/WarpsGUITest.java new file mode 100755 index 00000000..64afb0ef --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/gui/WarpsGUITest.java @@ -0,0 +1,102 @@ +package com.iridium.iridiumteams.gui; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.google.common.collect.ImmutableMap; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class WarpsGUITest { + + private final Map inventoryLayout = new ImmutableMap.Builder() + .put(9, Material.STONE) + .put(10, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(11, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(12, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(13, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(14, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(15, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(16, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .put(17, Material.LIGHT_GRAY_STAINED_GLASS_PANE) + .build(); + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void WarpsGUI__HasItems() { + TestTeam testTeam = new TeamBuilder().withWarp("test", "", null).build(); + WarpsGUI warpsGUI = new WarpsGUI<>(testTeam, null, TestPlugin.getInstance()); + Inventory inventory = warpsGUI.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + assertEquals(inventoryLayout.getOrDefault(i, Material.BLACK_STAINED_GLASS_PANE), inventory.getContents()[i].getType(), "Item on slot " + i + " not as expected"); + } + } + + @Test + public void WarpsGUI__LeftClick() { + Location location = new Location(null, 100, 0, 100); + TestTeam testTeam = new TeamBuilder().withWarp("test", null, location).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + WarpsGUI warpsGUI = new WarpsGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(warpsGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.LEFT, 9); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().teleportingWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%name%", "test") + )); + playerMock.assertNoMoreSaid(); + assertEquals(location, playerMock.getLocation()); + } + + @Test + public void WarpsGUI__RightClick() { + Location location = new Location(null, 100, 0, 100); + TestTeam testTeam = new TeamBuilder().withPermission(1, PermissionType.MANAGE_WARPS, true).withWarp("test", null, location).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withRank(1).withTeam(testTeam).build(); + + WarpsGUI warpsGUI = new WarpsGUI<>(testTeam, null, TestPlugin.getInstance()); + playerMock.openInventory(warpsGUI.getInventory()); + InventoryClickEvent inventoryClickEvent = playerMock.simulateInventoryClick(playerMock.getOpenInventory(), ClickType.RIGHT, 9); + + assertTrue(inventoryClickEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().deletedWarp + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%player%", playerMock.getName()) + .replace("%name%", "test") + )); + playerMock.assertNoMoreSaid(); + assertFalse(TestPlugin.getInstance().getTeamManager().getTeamWarp(testTeam, "test").isPresent()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/listeners/BlockBreakListenerTest.java b/src/test/java/com/iridium/iridiumteams/listeners/BlockBreakListenerTest.java index 4adb0b6a..b938541c 100755 --- a/src/test/java/com/iridium/iridiumteams/listeners/BlockBreakListenerTest.java +++ b/src/test/java/com/iridium/iridiumteams/listeners/BlockBreakListenerTest.java @@ -50,6 +50,15 @@ public void onBlockBreakNotCancelled__HasPermissions() { assertFalse(playerMock.simulateBlockBreak(playerMock.getLocation().getBlock()).isCancelled()); } + @Test + public void onBlockBreakNotCancelled__IsTrusted() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.BLOCK_BREAK, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTrust(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + assertFalse(playerMock.simulateBlockBreak(playerMock.getLocation().getBlock()).isCancelled()); + } + @Test public void onBlockBreakCancelled__NoPermissions() { TestTeam team = new TeamBuilder().withPermission(1, PermissionType.BLOCK_BREAK, false).build(); diff --git a/src/test/java/com/iridium/iridiumteams/listeners/BlockPlaceListenerTest.java b/src/test/java/com/iridium/iridiumteams/listeners/BlockPlaceListenerTest.java index 830cffb8..5d56f8c1 100755 --- a/src/test/java/com/iridium/iridiumteams/listeners/BlockPlaceListenerTest.java +++ b/src/test/java/com/iridium/iridiumteams/listeners/BlockPlaceListenerTest.java @@ -51,6 +51,15 @@ public void onBlockPlaceNotCancelled__HasPermissions() { assertFalse(playerMock.simulateBlockPlace(Material.STONE, playerMock.getLocation()).isCancelled()); } + @Test + public void onBlockPlaceNotCancelled__IsTrusted() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.BLOCK_PLACE, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTrust(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + + assertFalse(playerMock.simulateBlockPlace(Material.STONE, playerMock.getLocation()).isCancelled()); + } + @Test public void onBlockPlaceCancelled__NoPermissions() { TestTeam team = new TeamBuilder().withPermission(1, PermissionType.BLOCK_PLACE, false).build(); diff --git a/src/test/java/com/iridium/iridiumteams/listeners/LeavesDecayListenerTest.java b/src/test/java/com/iridium/iridiumteams/listeners/LeavesDecayListenerTest.java new file mode 100644 index 00000000..d15960d3 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/listeners/LeavesDecayListenerTest.java @@ -0,0 +1,70 @@ +package com.iridium.iridiumteams.listeners; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.managers.TeamManager; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.event.block.LeavesDecayEvent; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class LeavesDecayListenerTest { + + private ServerMock serverMock; + + @BeforeEach + public void setUp() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void onLeavesDecay_ShouldCancelEvent_WhenLeafDecayIsDisabled() { + TestTeam team = new TeamBuilder().withSetting(SettingType.LEAF_DECAY, "Disabled").build(); + TeamManager.teamViaLocation = Optional.of(team); + + World world = serverMock.addSimpleWorld("world"); + LeavesDecayEvent leavesDecayEvent = new LeavesDecayEvent(new Location(world, 0, 0, 0).getBlock()); + Bukkit.getPluginManager().callEvent(leavesDecayEvent); + + assertTrue(leavesDecayEvent.isCancelled()); + } + + @Test + public void onLeavesDecay_ShouldNotCancelEvent_WhenLeafDecayIsEnabled() { + TestTeam team = new TeamBuilder().withSetting(SettingType.LEAF_DECAY, "Enabled").build(); + TeamManager.teamViaLocation = Optional.of(team); + + World world = serverMock.addSimpleWorld("world"); + LeavesDecayEvent leavesDecayEvent = new LeavesDecayEvent(new Location(world, 0, 0, 0).getBlock()); + Bukkit.getPluginManager().callEvent(leavesDecayEvent); + + assertFalse(leavesDecayEvent.isCancelled()); + } + + @Test + public void onLeavesDecay_ShouldNotCancelEvent_WhenNoTeamExists() { + World world = serverMock.addSimpleWorld("world"); + LeavesDecayEvent leavesDecayEvent = new LeavesDecayEvent(new Location(world, 0, 0, 0).getBlock()); + Bukkit.getPluginManager().callEvent(leavesDecayEvent); + + assertFalse(leavesDecayEvent.isCancelled()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/listeners/PlayerInteractListenerTest.java b/src/test/java/com/iridium/iridiumteams/listeners/PlayerInteractListenerTest.java new file mode 100644 index 00000000..7711ca82 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/listeners/PlayerInteractListenerTest.java @@ -0,0 +1,354 @@ +package com.iridium.iridiumteams.listeners; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.block.BlockMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.PermissionType; +import com.iridium.iridiumteams.SettingType; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.managers.TeamManager; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class PlayerInteractListenerTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void onSignChange__Cannot_Edit_Sign() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.INTERACT, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock sign = new BlockMock(Material.OAK_SIGN); + + SignChangeEvent signChangeEvent = new SignChangeEvent( + sign, + playerMock, + new ArrayList() + ); + + serverMock.getPluginManager().callEvent(signChangeEvent); + + assertTrue(signChangeEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotInteract + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onSignChange__Can_Edit_Sign() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.INTERACT, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock sign = new BlockMock(Material.OAK_SIGN); + + SignChangeEvent signChangeEvent = new SignChangeEvent( + sign, + playerMock, + new ArrayList() + ); + + serverMock.getPluginManager().callEvent(signChangeEvent); + + assertFalse(signChangeEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteractEntityEvent__Cannot_Interact() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.SPAWNERS, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + Entity entity = playerMock.getWorld().spawnEntity(playerMock.getLocation(), EntityType.ITEM_FRAME); + + PlayerInteractEntityEvent playerInteractEntityEvent = new PlayerInteractEntityEvent( + playerMock, + entity + ); + + serverMock.getPluginManager().callEvent(playerInteractEntityEvent); + + assertTrue(playerInteractEntityEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotInteract + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteractEntityEvent__Can_Interact() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.SPAWNERS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + Entity entity = playerMock.getWorld().spawnEntity(playerMock.getLocation(), EntityType.ITEM_FRAME); + + PlayerInteractEntityEvent playerInteractEntityEvent = new PlayerInteractEntityEvent( + playerMock, + entity + ); + + serverMock.getPluginManager().callEvent(playerInteractEntityEvent); + + assertFalse(playerInteractEntityEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Cannot_Open_Containers() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.OPEN_CONTAINERS, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.CHEST); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + new ItemStack(Material.AIR), + block, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertTrue(playerInteractEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotOpenContainers + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Can_Open_Containers() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.OPEN_CONTAINERS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.CHEST); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + new ItemStack(Material.AIR), + block, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertFalse(playerInteractEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Cannot_Open_Doors() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.DOORS, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.OAK_DOOR); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + new ItemStack(Material.AIR), + block, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertTrue(playerInteractEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotOpenDoors + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Can_Open_Doors() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.DOORS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.OAK_DOOR); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + new ItemStack(Material.AIR), + block, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertFalse(playerInteractEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Cannot_Trigger_Redstone() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.REDSTONE, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.LEVER); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + new ItemStack(Material.AIR), + block, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertTrue(playerInteractEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotTriggerRedstone + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Can_Trigger_Redstone() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.REDSTONE, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.LEVER); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + new ItemStack(Material.AIR), + block, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertFalse(playerInteractEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Cannot_Trample_Crops() { + TestTeam team = new TeamBuilder().withSetting(SettingType.CROP_TRAMPLE, "Disabled").build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.FARMLAND); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.PHYSICAL, + new ItemStack(Material.AIR), + block, + BlockFace.UP + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertTrue(playerInteractEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Can_Trample_Crops() { + TestTeam team = new TeamBuilder().withSetting(SettingType.CROP_TRAMPLE, "Enabled").build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + BlockMock block = new BlockMock(Material.FARMLAND); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.PHYSICAL, + new ItemStack(Material.AIR), + block, + BlockFace.UP + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertFalse(playerInteractEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + } + + /**@Test + public void onPlayerInteract__Cannot_Change_Spawners() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.SPAWNERS, false).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + CreatureSpawnerMock spawnerMock = new CreatureSpawnerMock(); + BlockMock blockMock = new BlockMock(Material.SPAWNER); + blockMock.setState(spawnerMock); + + ItemStack itemStack = new ItemStack(Material.PIG_SPAWN_EGG); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + itemStack, + blockMock, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertTrue(playerInteractEvent.isCancelled()); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotBreakSpawners + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix))); + playerMock.assertNoMoreSaid(); + } + + @Test + public void onPlayerInteract__Can_Change_Spawners() { + TestTeam team = new TeamBuilder().withPermission(1, PermissionType.SPAWNERS, true).build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(team).build(); + TeamManager.teamViaLocation = Optional.of(team); + CreatureSpawnerMock spawnerMock = new CreatureSpawnerMock(); + BlockMock blockMock = new BlockMock(Material.SPAWNER); + blockMock.setState(spawnerMock); + + ItemStack itemStack = new ItemStack(Material.PIG_SPAWN_EGG); + playerMock.getInventory().setItemInMainHand(itemStack); + + PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent( + playerMock, + Action.RIGHT_CLICK_BLOCK, + itemStack, + blockMock, + BlockFace.EAST + ); + + serverMock.getPluginManager().callEvent(playerInteractEvent); + + assertFalse(playerInteractEvent.isCancelled()); + playerMock.assertNoMoreSaid(); + }*/ +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListenerTest.java b/src/test/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListenerTest.java index 8acdf973..8a5b17eb 100755 --- a/src/test/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListenerTest.java +++ b/src/test/java/com/iridium/iridiumteams/listeners/SpawnerSpawnListenerTest.java @@ -2,6 +2,7 @@ import be.seeseemelk.mockbukkit.MockBukkit; import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.block.state.BlockStateMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.iridiumteams.UserBuilder; @@ -13,6 +14,7 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.block.CreatureSpawner; import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; @@ -77,10 +79,18 @@ public void onSpawnerSpawn__BoosterActive() { } //TODO move to mockbukkit -class CreatureSpawnerMock implements CreatureSpawner{ +class CreatureSpawnerMock extends BlockStateMock implements CreatureSpawner { int spawnCount = 4; + public CreatureSpawnerMock() { + this(Material.SPAWNER); + } + + public CreatureSpawnerMock(@NotNull Material material) { + super(material); + } + @Override public @NotNull EntityType getSpawnedType() { return null; @@ -91,6 +101,11 @@ public void setSpawnedType(@NotNull EntityType creatureType) { } + @Override + public @NotNull BlockState getSnapshot() { + return this; + } + @Override public void setCreatureTypeByName(@NotNull String creatureType) { diff --git a/src/test/java/com/iridium/iridiumteams/managers/CommandManagerTest.java b/src/test/java/com/iridium/iridiumteams/managers/CommandManagerTest.java index de246729..be19f88a 100755 --- a/src/test/java/com/iridium/iridiumteams/managers/CommandManagerTest.java +++ b/src/test/java/com/iridium/iridiumteams/managers/CommandManagerTest.java @@ -20,8 +20,7 @@ import java.util.List; import java.util.Optional; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; class CommandManagerTest { @@ -112,6 +111,28 @@ public void CommandManager__Success() { assertTrue(TestCommand.hasCalled); } + @Test + public void CommandManager__Cooldown() { + // Lets change the message so it doesnt include the exact timings to avoid flakey tests + TestPlugin.getInstance().getMessages().activeCooldown = "%prefix% &7You cannot do that due to a running cooldown, please wait"; + + PlayerMock playerMock = new UserBuilder(serverMock).withPermission("iridiumteams.test").withTeam(new TeamBuilder().build()).build(); + + serverMock.dispatchCommand(playerMock, "test test"); + + playerMock.assertNoMoreSaid(); + assertTrue(TestCommand.hasCalled); + + TestCommand.hasCalled = false; + + serverMock.dispatchCommand(playerMock, "test test"); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().activeCooldown + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertFalse(TestCommand.hasCalled); + } + @Test public void CommandManager__UnknownCommand() { PlayerMock playerMock = new UserBuilder(serverMock).withTeam(new TeamBuilder().build()).build(); diff --git a/src/test/java/com/iridium/iridiumteams/managers/MissionManagerTest.java b/src/test/java/com/iridium/iridiumteams/managers/MissionManagerTest.java new file mode 100644 index 00000000..7d770790 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/managers/MissionManagerTest.java @@ -0,0 +1,132 @@ +package com.iridium.iridiumteams.managers; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.database.TeamMission; +import com.iridium.iridiumteams.missions.MissionData; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class MissionManagerTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void handleMissionUpdate__DoesntIncrementsValue__DependencyNotComplete() { + TestTeam testTeam = new TeamBuilder().build(); + TestPlugin.getInstance().getMissions().missions.get("mine_oak").getMissionData().get(1).getMissionDependencies().add(new MissionData.MissionDependency("test", 1)); + TeamMission teamMission = TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, "mine_oak"); + World world = serverMock.createWorld(new WorldCreator("world")); + TestPlugin.getInstance().getConfiguration().whitelistedWorlds = List.of("world"); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + + TestPlugin.getInstance().getMissionManager().handleMissionUpdate(testTeam, world, "MINE", "OAK_LOG", 1); + + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + } + + @Test + public void handleMissionUpdate__IncrementsValues() { + TestTeam testTeam = new TeamBuilder().build(); + TeamMission teamMission = TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, "mine_oak"); + World world = serverMock.createWorld(new WorldCreator("world")); + TestPlugin.getInstance().getConfiguration().whitelistedWorlds = List.of("world"); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + TestPlugin.getInstance().getMissionManager().handleMissionUpdate(testTeam, world, "MINE", "OAK_LOG", 1); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + } + + @Test + public void handleMissionUpdate__CompletesMission() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TeamMission teamMission = TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, "mine_oak"); + World world = serverMock.createWorld(new WorldCreator("world")); + TestPlugin.getInstance().getConfiguration().whitelistedWorlds = List.of("world"); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + TestPlugin.getInstance().getMissionManager().handleMissionUpdate(testTeam, world, "MINE", "OAK_LOG", 100); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + assertEquals(2, teamMission.getMissionLevel()); + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + playerMock.assertSaid(StringUtils.color( + """ + %prefix% &7Mission Completed! + &c&l* &7+3 Island Experience + &c&l* &7+5 Island Crystals + &c&l* &7+1000 Money + &7/is rewards to redeem rewards""" + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamRewards(testTeam).size()); + } + + @Test + public void handleMissionUpdate__MissionAlreadyCompleted() { + TestTeam testTeam = new TeamBuilder().build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + TeamMission teamMission = TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, "mine_oak"); + World world = serverMock.createWorld(new WorldCreator("world")); + TestPlugin.getInstance().getConfiguration().whitelistedWorlds = List.of("world"); + TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).setProgress(10); + TestPlugin.getInstance().getMissionManager().handleMissionUpdate(testTeam, world, "MINE", "OAK_LOG", 100); + assertEquals(10, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + playerMock.assertNoMoreSaid(); + } + + @Test + public void handleMissionUpdate_ShouldNotIncrementValue_WhenMissionIsNotInWhitelistedWorld() { + TestTeam testTeam = new TeamBuilder().build(); + TeamMission teamMission = TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, "mine_oak"); + World world = serverMock.createWorld(new WorldCreator("world")); + TestPlugin.getInstance().getConfiguration().whitelistedWorlds = List.of("differentWorld"); + TestPlugin.getInstance().getMissionManager().handleMissionUpdate(testTeam, world, "MINE", "OAK_LOG", 1); + assertEquals(0, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + } + + @Test + public void handleMissionUpdate_ShouldIncrementValue_WhenWhitelistedWorldIsEmpty() { + TestTeam testTeam = new TeamBuilder().build(); + TeamMission teamMission = TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, "mine_oak"); + World world = serverMock.createWorld(new WorldCreator("world")); + TestPlugin.getInstance().getConfiguration().whitelistedWorlds = Collections.emptyList(); + TestPlugin.getInstance().getMissionManager().handleMissionUpdate(testTeam, world, "MINE", "OAK_LOG", 1); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + } + + @Test + public void handleMissionUpdate_ShouldIncrementValue_WhenMissionIsInWhitelistedWorld() { + TestTeam testTeam = new TeamBuilder().build(); + TeamMission teamMission = TestPlugin.getInstance().getTeamManager().getTeamMission(testTeam, "mine_oak"); + World world = serverMock.createWorld(new WorldCreator("world")); + TestPlugin.getInstance().getConfiguration().whitelistedWorlds = List.of("world"); + TestPlugin.getInstance().getMissionManager().handleMissionUpdate(testTeam, world, "MINE", "OAK_LOG", 1); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamMissionData(teamMission, 0).getProgress()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/managers/ShopManagerTest.java b/src/test/java/com/iridium/iridiumteams/managers/ShopManagerTest.java new file mode 100644 index 00000000..9ac79a4f --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/managers/ShopManagerTest.java @@ -0,0 +1,137 @@ +package com.iridium.iridiumteams.managers; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumcore.utils.InventoryUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.iridiumteams.configs.Shop; +import com.iridium.testplugin.TestPlugin; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ShopManagerTest { + private ServerMock serverMock; + private Shop.ShopItem dirtItem; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + + dirtItem = new Shop.ShopItem( + "&9&lDirt Block", + XMaterial.DIRT, + 16, + 0, + new Shop.Cost(200, new HashMap<>()), + new Shop.Cost(30, new HashMap<>()), + 1 + ); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void ShopManager__Buy__CantAfford() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + TestPlugin.getInstance().getShopManager().buy(playerMock, dirtItem, 1); + + playerMock.assertSoundHeard(Sound.BLOCK_ANVIL_LAND); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().cannotAfford + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + } + + @Test + public void ShopManager__Buy__CanAfford() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 10000); + + TestPlugin.getInstance().getShopManager().buy(playerMock, dirtItem, 64); + + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().successfullyBought + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "64") + .replace("%item%", StringUtils.color(dirtItem.name)) + .replace("%vault_cost%", "800") + )); + playerMock.assertNoMoreSaid(); + + assertEquals(64, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.DIRT)); + assertEquals(9200, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + } + + @Test + public void ShopManager__Sell() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + playerMock.getInventory().addItem(new ItemStack(Material.DIRT, 64)); + + TestPlugin.getInstance().getShopManager().sell(playerMock, dirtItem, 64); + + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().successfullySold + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "64") + .replace("%item%", StringUtils.color(dirtItem.name)) + .replace("%vault_reward%", "120.0") + )); + playerMock.assertNoMoreSaid(); + + assertEquals(0, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.DIRT)); + assertEquals(120, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + } + + @Test + public void ShopManager__Sell__StackWhenYouDontHaveAStack() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + playerMock.getInventory().addItem(new ItemStack(Material.DIRT, 32)); + + TestPlugin.getInstance().getShopManager().sell(playerMock, dirtItem, 64); + + playerMock.assertSoundHeard(Sound.ENTITY_PLAYER_LEVELUP); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().successfullySold + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + .replace("%amount%", "32") + .replace("%item%", StringUtils.color(dirtItem.name)) + .replace("%vault_reward%", "60.0") + )); + playerMock.assertNoMoreSaid(); + + assertEquals(0, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.DIRT)); + assertEquals(60, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + } + + @Test + public void ShopManager__Sell__NoneInInventory() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + TestPlugin.getInstance().getEconomy().depositPlayer(playerMock, 10000); + + TestPlugin.getInstance().getShopManager().sell(playerMock, dirtItem, 64); + + playerMock.assertSoundHeard(Sound.BLOCK_ANVIL_LAND); + playerMock.assertSaid(StringUtils.color(TestPlugin.getInstance().getMessages().noSuchItem + .replace("%prefix%", TestPlugin.getInstance().getConfiguration().prefix) + )); + playerMock.assertNoMoreSaid(); + + assertEquals(0, InventoryUtils.getAmount(playerMock.getInventory(), XMaterial.DIRT)); + assertEquals(10000, TestPlugin.getInstance().getEconomy().getBalance(playerMock)); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/managers/SupportManagerTest.java b/src/test/java/com/iridium/iridiumteams/managers/SupportManagerTest.java new file mode 100644 index 00000000..55cc58b5 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/managers/SupportManagerTest.java @@ -0,0 +1,49 @@ +package com.iridium.iridiumteams.managers; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import com.iridium.testplugin.TestPlugin; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SupportManagerTest { + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void SupportManager__Stacker_Support_Empty() { + TestPlugin.getInstance().getSupportManager().registerSupport(); + assertTrue(TestPlugin.getInstance().getSupportManager().getStackerSupport().isEmpty()); + } + + @Test + public void SupportManager__Spawner_Support_Empty() { + TestPlugin.getInstance().getSupportManager().registerSupport(); + assertTrue(TestPlugin.getInstance().getSupportManager().getSpawnerSupport().isEmpty()); + } + + @Test + public void SupportManager__Spawn_Support_Empty() { + TestPlugin.getInstance().getSupportManager().registerSupport(); + assertTrue(TestPlugin.getInstance().getSupportManager().getSpawnSupport().isEmpty()); + } + + @Test + public void SupportManager__Provider_List_Empty() { + TestPlugin.getInstance().getSupportManager().registerSupport(); + assertTrue(TestPlugin.getInstance().getSupportManager().getProviderList().isEmpty()); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/managers/TeamManagerTest.java b/src/test/java/com/iridium/iridiumteams/managers/TeamManagerTest.java index 367d173d..dc4017f6 100644 --- a/src/test/java/com/iridium/iridiumteams/managers/TeamManagerTest.java +++ b/src/test/java/com/iridium/iridiumteams/managers/TeamManagerTest.java @@ -2,7 +2,7 @@ import be.seeseemelk.mockbukkit.MockBukkit; import be.seeseemelk.mockbukkit.ServerMock; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumteams.TeamBuilder; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; @@ -37,4 +37,19 @@ public void getTeamValue() { .build(); assertEquals(1350, TestPlugin.getInstance().getTeamManager().getTeamValue(team)); } + + @Test + public void getTeamLevel_ShouldReturnOne_WhenLevelingDisabled() { + TestPlugin.getInstance().getConfiguration().enableLeveling = false; + + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamLevel(100)); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamLevel(0)); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamLevel(-100)); + } + + @Test + public void getTeamLevel_ShouldHaveMinimumLevelOfOne() { + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamLevel(0)); + assertEquals(1, TestPlugin.getInstance().getTeamManager().getTeamLevel(-100)); + } } \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/placeholders/PlaceholdersTest.java b/src/test/java/com/iridium/iridiumteams/placeholders/PlaceholdersTest.java new file mode 100644 index 00000000..900a1643 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/placeholders/PlaceholdersTest.java @@ -0,0 +1,114 @@ +package com.iridium.iridiumteams.placeholders; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import com.iridium.iridiumcore.utils.Placeholder; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.iridiumteams.UserBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import com.iridium.testplugin.managers.TeamManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class PlaceholdersTest { + + private ServerMock serverMock; + private Placeholders placeholders; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + placeholders = new Placeholders<>(TestPlugin.getInstance()); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + + @Test + public void Placeholders__getPlaceholders__ReturnsSize() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + List placeholderList = placeholders.getPlaceholders(playerMock); + + int playerPlaceholders = TestPlugin.getInstance().getUserPlaceholderBuilder().getPlaceholders(Optional.empty()).size(); + int teamPlaceholders = TestPlugin.getInstance().getUserPlaceholderBuilder().getPlaceholders(Optional.empty()).size(); + + assertEquals(playerPlaceholders + (teamPlaceholders * 42), placeholderList.size()); + } + + + @Test + public void Placeholders__getPlaceholders__ReturnsPlayerPlaceholders() { + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + List placeholderList = placeholders.getPlaceholders(playerMock); + Optional placeholder = placeholderList.stream().filter(p -> p.getKey().equals("%player_name%")).findFirst(); + + assertTrue(placeholder.isPresent()); + assertEquals(playerMock.getName(), placeholder.get().getValue()); + + } + + + @Test + public void Placeholders__getPlaceholders__ReturnsPlayerTeamPlaceholders() { + TestTeam testTeam = new TeamBuilder("My Team").build(); + PlayerMock playerMock = new UserBuilder(serverMock).withTeam(testTeam).build(); + + List placeholderList = placeholders.getPlaceholders(playerMock); + Optional placeholder = placeholderList.stream().filter(p -> p.getKey().equals("%team_name%")).findFirst(); + + assertTrue(placeholder.isPresent()); + assertEquals(testTeam.getName(), placeholder.get().getValue()); + } + + + @Test + public void Placeholders__getPlaceholders__ReturnsCurrentTeamPlaceholders() { + TestTeam testTeam = new TeamBuilder("My Team").build(); + TeamManager.teamViaLocation = Optional.of(testTeam); + PlayerMock playerMock = new UserBuilder(serverMock).build(); + + List placeholderList = placeholders.getPlaceholders(playerMock); + Optional placeholder = placeholderList.stream().filter(p -> p.getKey().equals("%current_team_name%")).findFirst(); + + assertTrue(placeholder.isPresent()); + assertEquals(testTeam.getName(), placeholder.get().getValue()); + } + + + @Test + public void Placeholders__getPlaceholders__ReturnsTopValueTeamPlaceholders() { + TestTeam testTeam = new TeamBuilder("My Team").build(); + + List placeholderList = placeholders.getPlaceholders(null); + Optional value1 = placeholderList.stream().filter(p -> p.getKey().equals("%top_value_1_team_name%")).findFirst(); + Optional experience1 = placeholderList.stream().filter(p -> p.getKey().equals("%top_experience_1_team_name%")).findFirst(); + Optional value2 = placeholderList.stream().filter(p -> p.getKey().equals("%top_value_2_team_name%")).findFirst(); + Optional experience2 = placeholderList.stream().filter(p -> p.getKey().equals("%top_experience_2_team_name%")).findFirst(); + + assertTrue(value1.isPresent()); + assertTrue(experience1.isPresent()); + assertTrue(value2.isPresent()); + assertTrue(experience2.isPresent()); + assertEquals(testTeam.getName(), value1.get().getValue()); + assertEquals(testTeam.getName(), experience1.get().getValue()); + assertEquals("N/A", value2.get().getValue()); + assertEquals("N/A", experience2.get().getValue()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/sorting/ExperienceTeamSortTest.java b/src/test/java/com/iridium/iridiumteams/sorting/ExperienceTeamSortTest.java new file mode 100644 index 00000000..c16a2e63 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/sorting/ExperienceTeamSortTest.java @@ -0,0 +1,38 @@ +package com.iridium.iridiumteams.sorting; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ExperienceTeamSortTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void getSortedTeams() { + TestTeam teamA = new TeamBuilder().withExperience(100).build(); + TestTeam teamB = new TeamBuilder().withExperience(27).build(); + TestTeam teamC = new TeamBuilder().withExperience(300).build(); + assertEquals(Arrays.asList(teamC, teamA, teamB), new ExperienceTeamSort().getSortedTeams(TestPlugin.getInstance())); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/sorting/TeamSortingTest.java b/src/test/java/com/iridium/iridiumteams/sorting/TeamSortingTest.java new file mode 100644 index 00000000..ee0a1720 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/sorting/TeamSortingTest.java @@ -0,0 +1,5 @@ +package com.iridium.iridiumteams.sorting; + +class TeamSortingTest { + +} \ No newline at end of file diff --git a/src/test/java/com/iridium/iridiumteams/sorting/ValueTeamSortTest.java b/src/test/java/com/iridium/iridiumteams/sorting/ValueTeamSortTest.java new file mode 100644 index 00000000..4a9af157 --- /dev/null +++ b/src/test/java/com/iridium/iridiumteams/sorting/ValueTeamSortTest.java @@ -0,0 +1,39 @@ +package com.iridium.iridiumteams.sorting; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import com.cryptomorin.xseries.XMaterial; +import com.iridium.iridiumteams.TeamBuilder; +import com.iridium.testplugin.TestPlugin; +import com.iridium.testplugin.TestTeam; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ValueTeamSortTest { + + private ServerMock serverMock; + + @BeforeEach + public void setup() { + this.serverMock = MockBukkit.mock(); + MockBukkit.load(TestPlugin.class); + } + + @AfterEach + public void tearDown() { + MockBukkit.unmock(); + } + + @Test + public void getSortedTeams() { + TestTeam teamA = new TeamBuilder().withBlocks(XMaterial.DIAMOND_BLOCK, 39).build(); + TestTeam teamB = new TeamBuilder().withBlocks(XMaterial.DIAMOND_BLOCK, 10).build(); + TestTeam teamC = new TeamBuilder().withBlocks(XMaterial.DIAMOND_BLOCK, 74).build(); + assertEquals(Arrays.asList(teamC, teamA, teamB), new ValueTeamSort().getSortedTeams(TestPlugin.getInstance())); + } +} \ No newline at end of file diff --git a/src/test/java/com/iridium/testplugin/TeamPlaceholderBuilder.java b/src/test/java/com/iridium/testplugin/TeamPlaceholderBuilder.java index 5bf5b4e1..2e50ecdf 100755 --- a/src/test/java/com/iridium/testplugin/TeamPlaceholderBuilder.java +++ b/src/test/java/com/iridium/testplugin/TeamPlaceholderBuilder.java @@ -3,18 +3,21 @@ import com.iridium.iridiumcore.utils.Placeholder; import com.iridium.iridiumteams.PlaceholderBuilder; -import java.util.Collections; import java.util.List; import java.util.Optional; public class TeamPlaceholderBuilder implements PlaceholderBuilder { @Override public List getPlaceholders(TestTeam testTeam) { - return Collections.emptyList(); + return List.of(new Placeholder("team_name", testTeam.getName())); + } + + public List getDefaultPlaceholders() { + return List.of(new Placeholder("team_name", "N/A")); } @Override - public List getPlaceholders(Optional testTeam) { - return Collections.emptyList(); + public List getPlaceholders(Optional optional) { + return optional.isPresent() ? getPlaceholders(optional.get()) : getDefaultPlaceholders(); } } diff --git a/src/test/java/com/iridium/testplugin/TestBankItem.java b/src/test/java/com/iridium/testplugin/TestBankItem.java deleted file mode 100755 index 918a7762..00000000 --- a/src/test/java/com/iridium/testplugin/TestBankItem.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.iridium.testplugin; - -import com.iridium.iridiumcore.Item; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; -import com.iridium.iridiumteams.IridiumTeams; -import com.iridium.iridiumteams.bank.BankItem; -import com.iridium.iridiumteams.bank.BankResponse; -import com.iridium.iridiumteams.database.TeamBank; -import org.bukkit.entity.Player; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class TestBankItem extends BankItem { - public static Map playerBalances; - - public TestBankItem() { - super("testBankItem", new Item(XMaterial.DIAMOND_BLOCK, 1, "", Collections.emptyList()), 10, true); - playerBalances = new HashMap<>(); - } - - @Override - public BankResponse withdraw(Player player, Number amount, TeamBank teamBank, IridiumTeams iridiumTeams) { - int balance = Math.min(amount.intValue(), (int) teamBank.getNumber()); - if (balance > 0) { - playerBalances.put(player.getUniqueId(), playerBalances.getOrDefault(player.getUniqueId(), 0) + balance); - teamBank.setNumber(teamBank.getNumber() - balance); - return new BankResponse(balance, true); - } - return new BankResponse(balance, false); - } - - @Override - public BankResponse deposit(Player player, Number amount, TeamBank teamBank, IridiumTeams iridiumTeams) { - int balance = Math.min(amount.intValue(), playerBalances.getOrDefault(player.getUniqueId(), 0)); - if (balance > 0) { - playerBalances.put(player.getUniqueId(), playerBalances.getOrDefault(player.getUniqueId(), 0) - balance); - teamBank.setNumber(teamBank.getNumber() + balance); - return new BankResponse(balance, true); - } - return new BankResponse(balance, false); - } -} diff --git a/src/test/java/com/iridium/testplugin/TestPlugin.java b/src/test/java/com/iridium/testplugin/TestPlugin.java index 4af4e608..69372c00 100755 --- a/src/test/java/com/iridium/testplugin/TestPlugin.java +++ b/src/test/java/com/iridium/testplugin/TestPlugin.java @@ -4,10 +4,15 @@ import com.iridium.iridiumteams.PlaceholderBuilder; import com.iridium.iridiumteams.TeamChatPlaceholderBuilder; import com.iridium.iridiumteams.configs.*; +import com.iridium.iridiumteams.managers.MissionManager; +import com.iridium.iridiumteams.managers.ShopManager; +import com.iridium.iridiumteams.managers.SupportManager; +import com.iridium.testplugin.api.EnhancementUpdateEvent; import com.iridium.testplugin.managers.CommandManager; import com.iridium.testplugin.managers.TeamManager; import com.iridium.testplugin.managers.UserManager; import net.milkbowl.vault.economy.Economy; +import org.bukkit.Bukkit; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPluginLoader; @@ -17,8 +22,24 @@ public class TestPlugin extends IridiumTeams { private static TestPlugin instance; private TeamManager teamManager; private UserManager userManager; - private CommandManager commandManager; + private MissionManager missionManager; + private ShopManager shopManager; + private SupportManager supportManager; + + private Configuration configuration; + private Messages messages; + private Commands commands; + private BlockValues blockValues; + private Top top; + private Permissions permissions; + private Inventories inventories; + private Enhancements enhancements; + private BankItems bankItems; + private Missions missions; + private Shop shop; + private Settings settings; + private final TestEconomyProvider economyProvider = new TestEconomyProvider(); public TestPlugin(JavaPluginLoader loader, PluginDescriptionFile description, File dataFolder, File file) { @@ -27,17 +48,33 @@ public TestPlugin(JavaPluginLoader loader, PluginDescriptionFile description, Fi @Override public void onEnable() { - super.onEnable(); instance = this; this.teamManager = new TeamManager(); this.userManager = new UserManager(); - this.commandManager = new CommandManager(this, "&c", "iridiumtest"); + this.missionManager = new MissionManager<>(this); + this.shopManager = new ShopManager<>(this); + this.supportManager = new SupportManager<>(this); + + super.onEnable(); } @Override - public void recalculateTeams() { + public void loadConfigs() { + this.configuration = new Configuration(); + this.messages = new Messages(); + this.commands = new Commands<>(); + this.blockValues = new BlockValues(); + this.top = new Top<>(); + this.permissions = new Permissions(); + this.inventories = new Inventories(); + this.enhancements = new Enhancements(); + this.bankItems = new BankItems(); + this.missions = new Missions(); + this.shop = new Shop(); + this.settings = new Settings(); + super.loadConfigs(); } @Override @@ -60,64 +97,86 @@ public TeamChatPlaceholderBuilder getTeamChatPlaceholderBuilder() { return new com.iridium.testplugin.TeamChatPlaceholderBuilder(); } - @Override public TeamManager getTeamManager() { - return teamManager; + return this.teamManager; } - @Override public UserManager getUserManager() { - return userManager; + return this.userManager; } - @Override public CommandManager getCommandManager() { - return commandManager; + return this.commandManager; + } + + public MissionManager getMissionManager() { + return this.missionManager; } @Override - public Configuration getConfiguration() { - return new Configuration(); + public ShopManager getShopManager() { + return this.shopManager; } @Override + public SupportManager getSupportManager() { + return this.supportManager; + } + + public Configuration getConfiguration() { + return this.configuration; + } + public Messages getMessages() { - return new Messages(); + return this.messages; } - @Override public Commands getCommands() { - return new Commands<>(); + return this.commands; } - @Override public BlockValues getBlockValues() { - return new BlockValues(); + return this.blockValues; } - @Override public Top getTop() { - return new Top<>(); + return this.top; } - @Override public Permissions getPermissions() { - return new Permissions(); + return this.permissions; } - @Override public Inventories getInventories() { - return new Inventories(); + return this.inventories; } - @Override public Enhancements getEnhancements() { - return new Enhancements(); + return this.enhancements; } - @Override public BankItems getBankItems() { - return new BankItems(); + return this.bankItems; + } + + public Missions getMissions() { + return this.missions; + } + + @Override + public Shop getShop() { + return shop; + } + + @Override + public Settings getSettings() { + return settings; + } + + @Override + public void registerListeners() { + super.registerListeners(); + Bukkit.getPluginManager().registerEvents(new EnhancementUpdateEvent(), this); } public static TestPlugin getInstance() { diff --git a/src/test/java/com/iridium/testplugin/TestRunnable.java b/src/test/java/com/iridium/testplugin/TestRunnable.java new file mode 100644 index 00000000..8cd5e218 --- /dev/null +++ b/src/test/java/com/iridium/testplugin/TestRunnable.java @@ -0,0 +1,14 @@ +package com.iridium.testplugin; + +public class TestRunnable implements Runnable { + private boolean run = false; + + @Override + public void run() { + run = true; + } + + public boolean hasRan() { + return run; + } +} diff --git a/src/test/java/com/iridium/testplugin/TestTeam.java b/src/test/java/com/iridium/testplugin/TestTeam.java index 0e39cde6..b1b83221 100755 --- a/src/test/java/com/iridium/testplugin/TestTeam.java +++ b/src/test/java/com/iridium/testplugin/TestTeam.java @@ -17,8 +17,18 @@ public TestTeam(String name, int id){ setId(id); } + @Override + public int getLevel() { + return TestPlugin.getInstance().getTeamManager().getTeamLevel(this.getExperience()); + } + @Override public double getValue() { return TestPlugin.getInstance().getTeamManager().getTeamValue(this); } + + @Override + public String getName() { + return super.getName(); + } } diff --git a/src/test/java/com/iridium/testplugin/UserPlaceholderBuilder.java b/src/test/java/com/iridium/testplugin/UserPlaceholderBuilder.java index c85ca546..3d3f39b7 100755 --- a/src/test/java/com/iridium/testplugin/UserPlaceholderBuilder.java +++ b/src/test/java/com/iridium/testplugin/UserPlaceholderBuilder.java @@ -3,18 +3,21 @@ import com.iridium.iridiumcore.utils.Placeholder; import com.iridium.iridiumteams.PlaceholderBuilder; -import java.util.Collections; import java.util.List; import java.util.Optional; public class UserPlaceholderBuilder implements PlaceholderBuilder { @Override public List getPlaceholders(User user) { - return Collections.emptyList(); + return List.of(new Placeholder("player_name", user.getName())); + } + + public List getDefaultPlaceholders() { + return List.of(new Placeholder("player_name", "N/A")); } @Override public List getPlaceholders(Optional optional) { - return Collections.emptyList(); + return optional.isPresent() ? getPlaceholders(optional.get()) : getDefaultPlaceholders(); } } diff --git a/src/test/java/com/iridium/testplugin/api/EnhancementUpdateEvent.java b/src/test/java/com/iridium/testplugin/api/EnhancementUpdateEvent.java new file mode 100644 index 00000000..0cb94cd2 --- /dev/null +++ b/src/test/java/com/iridium/testplugin/api/EnhancementUpdateEvent.java @@ -0,0 +1,17 @@ +package com.iridium.testplugin.api; + +import com.iridium.testplugin.TestTeam; +import com.iridium.testplugin.User; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class EnhancementUpdateEvent implements Listener { + + public static boolean called = false; + + @EventHandler + public void onEnhancementUpdate(com.iridium.iridiumteams.api.EnhancementUpdateEvent event){ + called = true; + } + +} diff --git a/src/test/java/com/iridium/testplugin/commands/TestCommand.java b/src/test/java/com/iridium/testplugin/commands/TestCommand.java index 47783bbd..1a198e71 100755 --- a/src/test/java/com/iridium/testplugin/commands/TestCommand.java +++ b/src/test/java/com/iridium/testplugin/commands/TestCommand.java @@ -14,13 +14,14 @@ public class TestCommand extends Command { public static boolean hasCalled; public TestCommand() { - super(List.of("test"), "Description", "/test test", "iridiumteams.test"); + super(List.of("test"), "Description", "/test test", "iridiumteams.test", 5); hasCalled = false; } @Override - public void execute(User user, TestTeam team, String[] arguments, IridiumTeams iridiumTeams) { + public boolean execute(User user, TestTeam team, String[] arguments, IridiumTeams iridiumTeams) { hasCalled = true; + return true; } @Override diff --git a/src/test/java/com/iridium/testplugin/managers/TeamManager.java b/src/test/java/com/iridium/testplugin/managers/TeamManager.java index 3247e3f8..f61e7e24 100755 --- a/src/test/java/com/iridium/testplugin/managers/TeamManager.java +++ b/src/test/java/com/iridium/testplugin/managers/TeamManager.java @@ -1,8 +1,8 @@ package com.iridium.testplugin.managers; -import com.iridium.iridiumcore.dependencies.xseries.XMaterial; -import com.iridium.iridiumteams.CreateCancelledException; +import com.cryptomorin.xseries.XMaterial; import com.iridium.iridiumteams.Rank; +import com.iridium.iridiumteams.Setting; import com.iridium.iridiumteams.database.*; import com.iridium.testplugin.TestPlugin; import com.iridium.testplugin.TestTeam; @@ -13,7 +13,9 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -22,25 +24,35 @@ public class TeamManager extends com.iridium.iridiumteams.managers.TeamManager teams; public static List teamPermissions; + public static List teamSettings; public static List teamInvites; + public static List teamTrusts; public static List teamSpawners; public static List teamBlocks; + public static List teamWarps; + public static List teamMissions; + public static List teamMissionData; public static Optional teamViaLocation; public static Map teamEnhancements; public static Map teamBank; - public static boolean cancelsCreate; + public static List teamRewards; public TeamManager() { super(TestPlugin.getInstance()); teams = new ArrayList<>(); teamPermissions = new ArrayList<>(); + teamSettings = new ArrayList<>(); teamInvites = new ArrayList<>(); + teamTrusts = new ArrayList<>(); teamViaLocation = Optional.empty(); teamBank = new HashMap<>(); teamEnhancements = new HashMap<>(); - cancelsCreate = false; teamBlocks = new ArrayList<>(); teamSpawners = new ArrayList<>(); + teamWarps = new ArrayList<>(); + teamMissions = new ArrayList<>(); + teamMissionData = new ArrayList<>(); + teamRewards = new ArrayList<>(); } @Override @@ -58,6 +70,16 @@ public Optional getTeamViaLocation(Location location) { return teamViaLocation; } + @Override + public Optional getTeamViaLocation(Location location, TestTeam teamCache) { + return teamViaLocation; + } + + @Override + public Optional getTeamViaLocation(Location location, Optional teamCache) { + return teamViaLocation; + } + @Override public Optional getTeamViaNameOrPlayer(String name) { if (name == null || name.equals("")) return Optional.empty(); @@ -69,19 +91,23 @@ public Optional getTeamViaNameOrPlayer(String name) { return team; } + @Override + public void sendTeamTitle(Player player, TestTeam team) { + // Do nothing + } + @Override public List getTeams() { return teams; } @Override - public List getTeamMembers(TestTeam team) { - return UserManager.users.stream().filter(user -> user.getTeamID() == team.getId()).collect(Collectors.toList()); + public boolean isInTeam(TestTeam team, Location location) { + return true; } @Override - public CompletableFuture createTeam(@NotNull Player owner, @NotNull String name) throws CreateCancelledException { - if (cancelsCreate) throw new CreateCancelledException(); + public CompletableFuture createTeam(@NotNull Player owner, @Nullable String name) { TestTeam testTeam = new TestTeam(name); User user = TestPlugin.getInstance().getUserManager().getUser(owner); @@ -91,8 +117,9 @@ public CompletableFuture createTeam(@NotNull Player owner, @NotNull St } @Override - public void deleteTeam(TestTeam team, User user) { + public boolean deleteTeam(TestTeam team, User user) { teams.remove(team); + return true; } @Override @@ -142,6 +169,31 @@ public void deleteTeamInvite(TeamInvite teamInvite) { teamInvites.remove(teamInvite); } + @Override + public Optional getTeamTrust(TestTeam team, User user) { + return teamTrusts.stream() + .filter(teamInvite -> teamInvite.getTeamID() == team.getId()) + .filter(teamInvite -> teamInvite.getUser() == user.getUuid()) + .findFirst(); + } + + @Override + public List getTeamTrusts(TestTeam team) { + return teamTrusts.stream() + .filter(teamInvite -> teamInvite.getTeamID() == team.getId()) + .collect(Collectors.toList()); + } + + @Override + public void createTeamTrust(TestTeam team, User user, User invitee) { + teamTrusts.add(new TeamTrust(team, user.getUuid(), invitee.getUuid())); + } + + @Override + public void deleteTeamTrust(TeamTrust teamTrust) { + teamTrusts.remove(teamTrust); + } + @Override public TeamBank getTeamBank(TestTeam team, String bankItem) { if (!teamBank.containsKey(bankItem)) { @@ -172,6 +224,19 @@ public TeamBlock getTeamBlock(TestTeam team, XMaterial xMaterial) { return b; } + @Override + public TeamSetting getTeamSetting(TestTeam team, String setting) { + Setting settingConfig = TestPlugin.getInstance().getSettingsList().get(setting); + String defaultValue = settingConfig == null ? "" : settingConfig.getDefaultValue(); + Optional teamSetting = teamSettings.stream().filter(s -> s.getTeamID() == team.getId() && s.getSetting().equals(setting)).findFirst(); + if (teamSetting.isPresent()) { + return teamSetting.get(); + } + TeamSetting ts = new TeamSetting(team, setting, defaultValue); + teamSettings.add(ts); + return ts; + } + @Override public TeamEnhancement getTeamEnhancement(TestTeam team, String enhancement) { if (!teamEnhancements.containsKey(enhancement)) { @@ -185,4 +250,90 @@ public CompletableFuture recalculateTeam(TestTeam team) { return CompletableFuture.runAsync(() -> { }); } + + @Override + public void createWarp(TestTeam team, UUID creator, Location location, String name, String password) { + teamWarps.add(new TeamWarp(team, creator, location, name, password)); + } + + @Override + public void deleteWarp(TeamWarp teamWarp) { + teamWarps.remove(teamWarp); + } + + @Override + public List getTeamWarps(TestTeam team) { + return teamWarps.stream().filter(teamWarp -> teamWarp.getTeamID() == team.getId()).collect(Collectors.toList()); + } + + @Override + public Optional getTeamWarp(TestTeam team, String name) { + return teamWarps.stream().filter(teamWarp -> teamWarp.getTeamID() == team.getId() && teamWarp.getName().equals(name)).findFirst(); + } + + @Override + public List getTeamMissions(TestTeam team) { + return teamMissions.stream() + .filter(teamMission -> teamMission.getTeamID() == team.getId()) + .collect(Collectors.toList()); + } + + @Override + public TeamMission getTeamMission(TestTeam team, String missionName) { + Optional teamMission = teamMissions.stream().filter(mission -> mission.getTeamID() == team.getId() && mission.getMissionName().equalsIgnoreCase(missionName)).findFirst(); + if (teamMission.isPresent()) { + return teamMission.get(); + } + TeamMission newTeamMission = new TeamMission(team, missionName, LocalDateTime.now().plusHours(1)); + teamMissions.add(newTeamMission); + return newTeamMission; + } + + @Override + public TeamMissionData getTeamMissionData(TeamMission teamMission, int missionIndex) { + Optional missionData = teamMissionData.stream() + .filter(mission -> mission.getMissionID() == teamMission.getId() && mission.getMissionIndex() == missionIndex) + .findFirst(); + if (missionData.isPresent()) { + return missionData.get(); + } + TeamMissionData newTeamMissionData = new TeamMissionData(teamMission, missionIndex); + teamMissionData.add(newTeamMissionData); + return newTeamMissionData; + } + + @Override + public List getTeamMissionData(TeamMission teamMission) { + return teamMissionData.stream() + .filter(mission -> mission.getMissionID() == teamMission.getId()) + .toList(); + } + + @Override + public void deleteTeamMission(TeamMission teamMission) { + teamMissions.remove(teamMission); + } + + @Override + public void deleteTeamMissionData(TeamMission teamMission) { + for(TeamMissionData missionData : teamMissionData) { + if(missionData.getMissionID() != teamMission.getId()) { continue; } + teamMissionData.remove(missionData); + } + } + + @Override + public List getTeamRewards(TestTeam team) { + return teamRewards.stream().filter(teamReward -> teamReward.getTeamID() == team.getId()).collect(Collectors.toList()); + } + + @Override + public void addTeamReward(TeamReward teamReward) { + teamRewards.add(teamReward); + } + + @Override + public void deleteTeamReward(TeamReward teamReward) { + teamRewards.remove(teamReward); + } } diff --git a/src/test/java/com/iridium/testplugin/managers/UserManager.java b/src/test/java/com/iridium/testplugin/managers/UserManager.java index 5c236679..a2b957e1 100755 --- a/src/test/java/com/iridium/testplugin/managers/UserManager.java +++ b/src/test/java/com/iridium/testplugin/managers/UserManager.java @@ -34,4 +34,9 @@ public UserManager() { public Optional getUserByUUID(@NotNull UUID uuid) { return users.stream().filter(user -> user.getUuid() == uuid).findFirst(); } + + @Override + public List getUsers() { + return users; + } }