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
+[](https://www.codacy.com/gh/Iridium-Development/IridiumSkyblock/dashboard)
+
+
+## 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