mirror of
https://github.com/plexusorg/Plex.git
synced 2025-07-04 16:56:40 +00:00
Compare commits
164 Commits
Author | SHA1 | Date | |
---|---|---|---|
88686c52a2 | |||
40e0bb0845 | |||
cc305f6bd6 | |||
3f99a0f07d | |||
daa9c79f95 | |||
9b961ac2f3 | |||
36ab0eb10e | |||
aadac1746e | |||
0c30f7dc4c | |||
b6645ded47 | |||
8aae81cbb6 | |||
dcef153c1f | |||
e759dc2269 | |||
c7225246fa | |||
5a1436afae | |||
e066d9b3a1 | |||
9e974ae737 | |||
23611e218b | |||
5f12a1532f | |||
fff35ad34c | |||
83ec997125 | |||
2ed88da151 | |||
c5b356e45a | |||
58fe304118 | |||
50d969975c | |||
52cc738d4d | |||
fd19d8417c | |||
efcb9b45df | |||
a5d77036a9 | |||
5c609b3d8f | |||
7383e0d9bb | |||
f1680174ae | |||
c0966a0f5e | |||
fa1a8a91ba | |||
129ef7b6bf | |||
d7ad94d270 | |||
a0471e63f6 | |||
e2b3488aa7 | |||
5b3a37835a | |||
344df2b225 | |||
6e5f0d7beb | |||
0c7b280aef | |||
647f17b5bd | |||
773f320cb6 | |||
8f55be369f | |||
5a7a2c1835 | |||
bc163aa51a | |||
5040c76dc6 | |||
7d94717de5 | |||
0add60322e | |||
068dd28fd4 | |||
357683a0f6 | |||
315e16488b | |||
85605774cf | |||
54015f668a | |||
532e82472b | |||
6ce4843829 | |||
7298c8669a | |||
6b7c076c41 | |||
7b56bd70e9 | |||
fbd36161d4 | |||
912dff0ec9 | |||
aab5083f78 | |||
adb0d070a4 | |||
e22f079062 | |||
8f713fd30c | |||
72467de5ce | |||
c9d954d1c0 | |||
b168029df1 | |||
f34df4f296 | |||
79206d9354 | |||
7bca348587 | |||
b35bf63ba4 | |||
8c5c058292 | |||
3d70100119 | |||
6a8228947b | |||
187226ff45 | |||
6d80d5f4e3 | |||
d4710f1808 | |||
bee4268d51 | |||
7254097ae4 | |||
20765403f4 | |||
9650685796 | |||
1cf262ff91 | |||
4de796781d | |||
b82747b0bf | |||
029cd40124 | |||
360775bac3 | |||
37ac71b6ee | |||
88f10ef9cc | |||
3608e8e825 | |||
3e9be76aa2 | |||
2364ab33ff | |||
28c57f3a52 | |||
5929fd9ddc | |||
14d859ef75 | |||
bc8c89449e | |||
709ed50748 | |||
cc9967f9c2 | |||
b0c19a14ab | |||
475169b36a | |||
bb019abd89 | |||
a7ed86549d | |||
ba23129b15 | |||
c51d8da5b7 | |||
2a2152603b | |||
2c7440804c | |||
b7db18284a | |||
91e09d982d | |||
15b12e6299 | |||
4b37497a14 | |||
b0a8b463cb | |||
1f48dc1e60 | |||
95c4da338e | |||
cea84884fc | |||
2331cb9f80 | |||
e4f18a24cc | |||
668460f486 | |||
7336cc8feb | |||
bc5d0476ee | |||
7ff6bdb171 | |||
175c7db23d | |||
f97411ce09 | |||
b0240ef46e | |||
4887960463 | |||
295e16b6c5 | |||
72d9e0817c | |||
28ec8e1d2d | |||
9d0e7bf6d6 | |||
96b0c81fed | |||
7dea0bcb72 | |||
8344e3596e | |||
37a649fa7a | |||
d7df923e5c | |||
d54325304e | |||
bc6dbb1052 | |||
ecbd9c02da | |||
77dc95ae29 | |||
91a1b1cfff | |||
0c6091f06a | |||
ffbad7928a | |||
7caa89539d | |||
ceb9a83eda | |||
a62bdef5b4 | |||
37649f1fdc | |||
ea512487ac | |||
41b0076f8f | |||
00b6473e4d | |||
77be23faf0 | |||
e39f882ea7 | |||
344d890877 | |||
2c8c6353c1 | |||
8fa05e3838 | |||
158ce52320 | |||
1cc431621b | |||
b9c873beb3 | |||
6e1fa15a6c | |||
c216bdc5a4 | |||
ed638679b2 | |||
76952e33b8 | |||
f3f7daaafb | |||
dbbaf4ab70 | |||
1a10fdd481 | |||
7565bb6fcf |
35
.idea/codeStyles/Plexus_Code_Style.xml
generated
35
.idea/codeStyles/Plexus_Code_Style.xml
generated
@ -1,33 +1,8 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
<code_scheme name="Plexus Code Style" version="1">
|
<code_scheme name="Plexus Code Style" version="173">
|
||||||
<JavaCodeStyleSettings>
|
|
||||||
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="20" />
|
|
||||||
<option name="IMPORT_LAYOUT_TABLE">
|
|
||||||
<value>
|
|
||||||
<package name="" withSubpackages="true" static="false" />
|
|
||||||
<package name="" withSubpackages="true" static="true" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
</JavaCodeStyleSettings>
|
|
||||||
<JetCodeStyleSettings>
|
|
||||||
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
|
|
||||||
<value>
|
|
||||||
<package name="java.util" alias="false" withSubpackages="false" />
|
|
||||||
<package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
|
|
||||||
<package name="io.ktor" alias="false" withSubpackages="true" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="PACKAGES_IMPORT_LAYOUT">
|
|
||||||
<value>
|
|
||||||
<package name="" alias="false" withSubpackages="true" />
|
|
||||||
<package name="java" alias="false" withSubpackages="true" />
|
|
||||||
<package name="javax" alias="false" withSubpackages="true" />
|
|
||||||
<package name="kotlin" alias="false" withSubpackages="true" />
|
|
||||||
<package name="" alias="true" withSubpackages="true" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
</JetCodeStyleSettings>
|
|
||||||
<codeStyleSettings language="JAVA">
|
<codeStyleSettings language="JAVA">
|
||||||
|
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
||||||
|
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
|
||||||
<option name="BRACE_STYLE" value="2" />
|
<option name="BRACE_STYLE" value="2" />
|
||||||
<option name="CLASS_BRACE_STYLE" value="2" />
|
<option name="CLASS_BRACE_STYLE" value="2" />
|
||||||
<option name="METHOD_BRACE_STYLE" value="2" />
|
<option name="METHOD_BRACE_STYLE" value="2" />
|
||||||
@ -36,14 +11,10 @@
|
|||||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
<option name="WHILE_ON_NEW_LINE" value="true" />
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||||
<option name="SPACE_AFTER_TYPE_CAST" value="true" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="3" />
|
<option name="IF_BRACE_FORCE" value="3" />
|
||||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||||
<option name="FOR_BRACE_FORCE" value="3" />
|
<option name="FOR_BRACE_FORCE" value="3" />
|
||||||
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="0" />
|
|
||||||
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
|
|
||||||
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
|
||||||
</codeStyleSettings>
|
</codeStyleSettings>
|
||||||
</code_scheme>
|
</code_scheme>
|
||||||
</component>
|
</component>
|
16
Jenkinsfile
vendored
16
Jenkinsfile
vendored
@ -1,5 +1,8 @@
|
|||||||
pipeline {
|
pipeline {
|
||||||
agent any
|
agent any
|
||||||
|
tools {
|
||||||
|
jdk 'JDK 21.0.3'
|
||||||
|
}
|
||||||
stages {
|
stages {
|
||||||
stage("build") {
|
stage("build") {
|
||||||
steps {
|
steps {
|
||||||
@ -8,24 +11,13 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage("publish") {
|
|
||||||
when {
|
|
||||||
branch "master"
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([usernamePassword(credentialsId: '85b7099f-2e65-461e-b2ce-124edec41ed6', passwordVariable: 'plexPassword', usernameVariable: 'plexUser')]) {
|
|
||||||
withGradle {
|
|
||||||
sh "./gradlew publish --no-daemon"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
archiveArtifacts artifacts: "build/libs/*.jar", fingerprint: true
|
archiveArtifacts artifacts: "build/libs/*.jar", fingerprint: true
|
||||||
javadoc javadocDir: "server/build/docs/javadoc", keepAll: false
|
javadoc javadocDir: "server/build/docs/javadoc", keepAll: false
|
||||||
discordSend description: "**Build:** ${env.BUILD_NUMBER}\n**Status:** ${currentBuild.currentResult}", enableArtifactsList: true, footer: "Built with Jenkins", link: env.BUILD_URL, result: currentBuild.currentResult, scmWebUrl: "https://github.com/plexusorg/Plex", showChangeset: true, title: env.JOB_NAME, webhookURL: env.WEBHOOK_URL
|
discordSend description: "**Build:** ${env.BUILD_NUMBER}\n**Status:** ${currentBuild.currentResult}", enableArtifactsList: true, footer: "Built with Jenkins", link: env.BUILD_URL, result: currentBuild.currentResult, scmWebUrl: "https://github.com/plexusorg/Plex", showChangeset: true, title: env.JOB_NAME, webhookURL: env.WEBHOOK_URL
|
||||||
|
discordSend description: "**Build:** ${env.BUILD_NUMBER}\n**Status:** ${currentBuild.currentResult}", enableArtifactsList: true, footer: "Built with Jenkins", link: env.BUILD_URL, result: currentBuild.currentResult, scmWebUrl: "https://github.com/plexusorg/Plex", showChangeset: true, title: env.JOB_NAME, webhookURL: env.TF_WEBHOOK_URL
|
||||||
cleanWs()
|
cleanWs()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Plex [](https://ci.plex.us.org/job/Plex/job/master/) 
|
# Plex [](https://ci.plex.us.org/job/Plex/job/master/) [](https://github.com/plexusorg/Plex/blob/master/LICENSE.md) [](https://discord.plex.us.org)
|
||||||
|
|
||||||
Plex is a new freedom plugin. It is an alternative to TotalFreedomMod. It has many of the features that make a freedom
|
Plex is a new freedom plugin. It is an alternative to TotalFreedomMod. It has many of the features that make a freedom
|
||||||
server unique, but also many features that TotalFreedomMod doesn’t have. For example, there is full support for using a
|
server unique, but also many features that TotalFreedomMod doesn’t have. For example, there is full support for using a
|
||||||
|
72
build.gradle
72
build.gradle
@ -1,72 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id "java"
|
|
||||||
id "maven-publish"
|
|
||||||
id "com.github.johnrengelman.shadow" version "7.1.2"
|
|
||||||
}
|
|
||||||
|
|
||||||
group = "dev.plex"
|
|
||||||
version = "1.2"
|
|
||||||
description = "Plex"
|
|
||||||
|
|
||||||
subprojects {
|
|
||||||
apply plugin: "java"
|
|
||||||
apply plugin: "maven-publish"
|
|
||||||
apply plugin: "com.github.johnrengelman.shadow"
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
maven {
|
|
||||||
url = uri("https://repo.papermc.io/repository/maven-public/")
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri("https://repository.apache.org/content/repositories/snapshots/")
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri("https://repo.maven.apache.org/maven2/")
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri("https://jitpack.io")
|
|
||||||
content {
|
|
||||||
includeGroup("com.github.MilkBowl")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.withType(JavaCompile) {
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
repositories {
|
|
||||||
maven {
|
|
||||||
def releasesRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-releases/")
|
|
||||||
def snapshotsRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-snapshots/")
|
|
||||||
url = rootProject.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
|
|
||||||
credentials {
|
|
||||||
username = System.getenv("plexUser")
|
|
||||||
password = System.getenv("plexPassword")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clean {
|
|
||||||
dependsOn(":server:clean")
|
|
||||||
dependsOn(":proxy:clean")
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyJars(type: Copy, dependsOn: subprojects.jar) {
|
|
||||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
||||||
from(subprojects.jar)
|
|
||||||
from(subprojects.shadowJar)
|
|
||||||
into project.file('build/libs')
|
|
||||||
}
|
|
91
build.gradle.kts
Normal file
91
build.gradle.kts
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
plugins {
|
||||||
|
id("java")
|
||||||
|
id("maven-publish")
|
||||||
|
id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.10"
|
||||||
|
id("net.kyori.blossom") version "2.1.0"
|
||||||
|
id("com.gradleup.shadow") version "9.0.0-beta12"
|
||||||
|
}
|
||||||
|
|
||||||
|
group = "dev.plex"
|
||||||
|
version = "1.5-SNAPSHOT"
|
||||||
|
description = "Plex"
|
||||||
|
|
||||||
|
subprojects {
|
||||||
|
apply(plugin = "java")
|
||||||
|
apply(plugin = "maven-publish")
|
||||||
|
apply(plugin = "org.jetbrains.gradle.plugin.idea-ext")
|
||||||
|
apply(plugin = "net.kyori.blossom")
|
||||||
|
apply(plugin = "com.gradleup.shadow")
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
url = uri("https://repo.papermc.io/repository/maven-public/")
|
||||||
|
}
|
||||||
|
|
||||||
|
maven {
|
||||||
|
url = uri("https://repository.apache.org/content/repositories/snapshots/")
|
||||||
|
}
|
||||||
|
|
||||||
|
maven {
|
||||||
|
url = uri("https://repo.maven.apache.org/maven2/")
|
||||||
|
}
|
||||||
|
|
||||||
|
maven {
|
||||||
|
url = uri("https://jitpack.io")
|
||||||
|
content {
|
||||||
|
includeGroup("com.github.MilkBowl")
|
||||||
|
includeGroup("com.github.LeonMangler")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks {
|
||||||
|
compileJava {
|
||||||
|
options.encoding = Charsets.UTF_8.name()
|
||||||
|
}
|
||||||
|
javadoc {
|
||||||
|
options.encoding = Charsets.UTF_8.name()
|
||||||
|
}
|
||||||
|
processResources {
|
||||||
|
filteringCharset = Charsets.UTF_8.name()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
val releasesRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-releases/")
|
||||||
|
val snapshotsRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-snapshots/")
|
||||||
|
url = if (rootProject.version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl
|
||||||
|
credentials {
|
||||||
|
username = System.getenv("plexUser")
|
||||||
|
password = System.getenv("plexPassword")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.clean {
|
||||||
|
dependsOn(subprojects.map {
|
||||||
|
it.project.tasks.clean
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register<Copy>("copyJars", fun Copy.() {
|
||||||
|
dependsOn(tasks.jar)
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
from(subprojects.map {
|
||||||
|
it.project.tasks.shadowJar
|
||||||
|
})
|
||||||
|
from(subprojects.map {
|
||||||
|
it.project.tasks.jar
|
||||||
|
})
|
||||||
|
into(file("build/libs"))
|
||||||
|
})
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,7 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-7.6-20220825090952+0000-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||||
|
networkTimeout=10000
|
||||||
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
44
gradlew
vendored
44
gradlew
vendored
@ -15,6 +15,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
@ -55,7 +57,7 @@
|
|||||||
# Darwin, MinGW, and NonStop.
|
# Darwin, MinGW, and NonStop.
|
||||||
#
|
#
|
||||||
# (3) This script is generated from the Groovy template
|
# (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.
|
# within the Gradle project.
|
||||||
#
|
#
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||||
@ -80,13 +82,12 @@ do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
# This is normally unused
|
||||||
|
# shellcheck disable=SC2034
|
||||||
APP_NAME="Gradle"
|
|
||||||
APP_BASE_NAME=${0##*/}
|
APP_BASE_NAME=${0##*/}
|
||||||
|
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
' "$PWD" ) || exit
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD=maximum
|
MAX_FD=maximum
|
||||||
@ -133,22 +134,29 @@ location of your Java installation."
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
JAVACMD=java
|
JAVACMD=java
|
||||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
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
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
location of your Java installation."
|
location of your Java installation."
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
# Increase the maximum file descriptors if we can.
|
||||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||||
case $MAX_FD in #(
|
case $MAX_FD in #(
|
||||||
max*)
|
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 ) ||
|
MAX_FD=$( ulimit -H -n ) ||
|
||||||
warn "Could not query maximum file descriptor limit"
|
warn "Could not query maximum file descriptor limit"
|
||||||
esac
|
esac
|
||||||
case $MAX_FD in #(
|
case $MAX_FD in #(
|
||||||
'' | soft) :;; #(
|
'' | 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" ||
|
ulimit -n "$MAX_FD" ||
|
||||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||||
esac
|
esac
|
||||||
@ -193,11 +201,15 @@ if "$cygwin" || "$msys" ; then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Collect all arguments for the java command;
|
|
||||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
# shell script including quotes and variable substitutions, so put them in
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
# double quotes to make sure that they get re-expanded; and
|
|
||||||
# * put everything else in single quotes, so that it's not re-expanded.
|
# Collect all arguments for the java command:
|
||||||
|
# * 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 -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
@ -205,6 +217,12 @@ set -- \
|
|||||||
org.gradle.wrapper.GradleWrapperMain \
|
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.
|
# Use "xargs" to parse quoted args.
|
||||||
#
|
#
|
||||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||||
|
33
gradlew.bat
vendored
33
gradlew.bat
vendored
@ -13,6 +13,8 @@
|
|||||||
@rem See the License for the specific language governing permissions and
|
@rem See the License for the specific language governing permissions and
|
||||||
@rem limitations under the License.
|
@rem limitations under the License.
|
||||||
@rem
|
@rem
|
||||||
|
@rem SPDX-License-Identifier: Apache-2.0
|
||||||
|
@rem
|
||||||
|
|
||||||
@if "%DEBUG%"=="" @echo off
|
@if "%DEBUG%"=="" @echo off
|
||||||
@rem ##########################################################################
|
@rem ##########################################################################
|
||||||
@ -26,6 +28,7 @@ if "%OS%"=="Windows_NT" setlocal
|
|||||||
|
|
||||||
set DIRNAME=%~dp0
|
set DIRNAME=%~dp0
|
||||||
if "%DIRNAME%"=="" set DIRNAME=.
|
if "%DIRNAME%"=="" set DIRNAME=.
|
||||||
|
@rem This is normally unused
|
||||||
set APP_BASE_NAME=%~n0
|
set APP_BASE_NAME=%~n0
|
||||||
set APP_HOME=%DIRNAME%
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
|
|||||||
|
|
||||||
set JAVA_EXE=java.exe
|
set JAVA_EXE=java.exe
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
if "%ERRORLEVEL%" == "0" goto execute
|
if %ERRORLEVEL% equ 0 goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|||||||
|
|
||||||
if exist "%JAVA_EXE%" goto execute
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
@ -75,13 +78,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||||
|
|
||||||
:fail
|
:fail
|
||||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
rem the _cmd.exe /c_ return code!
|
rem the _cmd.exe /c_ return code!
|
||||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
set EXIT_CODE=%ERRORLEVEL%
|
||||||
exit /b 1
|
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||||
|
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||||
|
exit /b %EXIT_CODE%
|
||||||
|
|
||||||
:mainEnd
|
:mainEnd
|
||||||
if "%OS%"=="Windows_NT" endlocal
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
plugins {
|
|
||||||
id("net.kyori.blossom") version "1.3.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
group = rootProject.group
|
group = rootProject.group
|
||||||
version = rootProject.version
|
version = rootProject.version
|
||||||
description = "Plex-Velocity"
|
description = "Plex-Velocity"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven { url = uri("https://papermc.io/repo/repository/maven-public/") }
|
maven { url = uri("https://repo.papermc.io/repository/maven-public/") }
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.getByName<Jar>("jar") {
|
tasks.getByName<Jar>("jar") {
|
||||||
@ -24,8 +20,14 @@ tasks {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main {
|
||||||
blossom {
|
blossom {
|
||||||
replaceToken("@version@", rootProject.version)
|
javaSources {
|
||||||
|
property("version", project.version.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
@ -37,9 +39,9 @@ publishing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly("org.projectlombok:lombok:1.18.24")
|
compileOnly("org.projectlombok:lombok:1.18.38")
|
||||||
annotationProcessor("org.projectlombok:lombok:1.18.24")
|
annotationProcessor("org.projectlombok:lombok:1.18.38")
|
||||||
compileOnly("org.json:json:20220320")
|
compileOnly("org.json:json:20250107")
|
||||||
compileOnly("com.velocitypowered:velocity-api:3.1.2-SNAPSHOT")
|
compileOnly("com.velocitypowered:velocity-api:3.4.0-SNAPSHOT")
|
||||||
annotationProcessor("com.velocitypowered:velocity-api:3.1.2-SNAPSHOT")
|
annotationProcessor("com.velocitypowered:velocity-api:3.4.0-SNAPSHOT")
|
||||||
}
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package dev.plex;
|
||||||
|
|
||||||
|
class BuildParameters {
|
||||||
|
public static final String VERSION = "{{ version }}";
|
||||||
|
}
|
@ -27,7 +27,7 @@ import lombok.Getter;
|
|||||||
@Plugin(
|
@Plugin(
|
||||||
name = "Plex",
|
name = "Plex",
|
||||||
id = "plex",
|
id = "plex",
|
||||||
version = "@version@",
|
version = BuildParameters.VERSION,
|
||||||
url = "https://plex.us.org",
|
url = "https://plex.us.org",
|
||||||
description = "Plex provides a new experience for freedom servers.",
|
description = "Plex provides a new experience for freedom servers.",
|
||||||
authors = {"Telesphoreo", "Taah"}
|
authors = {"Telesphoreo", "Taah"}
|
||||||
|
@ -1,139 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id "net.minecrell.plugin-yml.bukkit" version "0.5.2"
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
library "org.projectlombok:lombok:1.18.24"
|
|
||||||
annotationProcessor "org.projectlombok:lombok:1.18.24"
|
|
||||||
library "org.json:json:20220320"
|
|
||||||
library "commons-io:commons-io:2.11.0"
|
|
||||||
library "dev.morphia.morphia:morphia-core:2.2.7"
|
|
||||||
library "redis.clients:jedis:4.2.3"
|
|
||||||
library "org.mariadb.jdbc:mariadb-java-client:3.0.6"
|
|
||||||
library "com.zaxxer:HikariCP:5.0.1"
|
|
||||||
library "org.apache.httpcomponents.client5:httpclient5:5.2-beta1"
|
|
||||||
library "org.apache.commons:commons-lang3:3.12.0"
|
|
||||||
library "org.apache.maven.resolver:maven-resolver-api:1.8.2"
|
|
||||||
library "org.apache.maven.resolver:maven-resolver-impl:1.8.2"
|
|
||||||
library "org.apache.maven.resolver:maven-resolver-connector-basic:1.8.2"
|
|
||||||
library "org.apache.maven.resolver:maven-resolver-transport-http:1.8.2"
|
|
||||||
library "org.apache.maven:maven-resolver-provider:3.8.5"
|
|
||||||
library "org.eclipse.jetty:jetty-server:11.0.11"
|
|
||||||
library "org.eclipse.jetty:jetty-servlet:11.0.11"
|
|
||||||
library "org.eclipse.jetty:jetty-proxy:11.0.11"
|
|
||||||
library "com.google.code.gson:gson:2.9.0"
|
|
||||||
compileOnly "io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT"
|
|
||||||
compileOnly("com.github.MilkBowl:VaultAPI:1.7.1") {
|
|
||||||
exclude group: "org.bukkit", module: "bukkit"
|
|
||||||
}
|
|
||||||
implementation "org.bstats:bstats-base:3.0.0"
|
|
||||||
implementation "org.bstats:bstats-bukkit:3.0.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
group = rootProject.group
|
|
||||||
version = rootProject.version
|
|
||||||
description = "Plex-Server"
|
|
||||||
|
|
||||||
shadowJar {
|
|
||||||
archiveBaseName.set("Plex")
|
|
||||||
archiveClassifier.set("")
|
|
||||||
relocate "org.bstats", "dev.plex"
|
|
||||||
}
|
|
||||||
|
|
||||||
bukkit {
|
|
||||||
name = "Plex"
|
|
||||||
version = project.version
|
|
||||||
description = "Plex provides a new experience for freedom servers."
|
|
||||||
main = "dev.plex.Plex"
|
|
||||||
website = "https://plex.us.org"
|
|
||||||
authors = ["Telesphoreo", "taahanis", "supernt"]
|
|
||||||
softDepend = ["Vault"]
|
|
||||||
apiVersion = "1.18"
|
|
||||||
}
|
|
||||||
|
|
||||||
String getGitHash() {
|
|
||||||
def stdout = new ByteArrayOutputStream()
|
|
||||||
try {
|
|
||||||
exec {
|
|
||||||
commandLine "git", "rev-parse", "--short", "HEAD"
|
|
||||||
standardOutput = stdout
|
|
||||||
ignoreExitValue = true
|
|
||||||
}
|
|
||||||
} catch (GradleException e) {
|
|
||||||
logger.error("Couldn't determine Git head because Git is not installed. " + e.getMessage())
|
|
||||||
}
|
|
||||||
return stdout.size() > 0 ? stdout.toString().trim() : "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
String getBuildNumber() {
|
|
||||||
def stdout = new ByteArrayOutputStream()
|
|
||||||
try {
|
|
||||||
exec {
|
|
||||||
commandLine "git", "rev-list", "HEAD", "--count"
|
|
||||||
standardOutput = stdout
|
|
||||||
ignoreExitValue = true
|
|
||||||
}
|
|
||||||
} catch (GradleException e) {
|
|
||||||
logger.error("Couldn't determine build number because Git is not installed. " + e.getMessage())
|
|
||||||
}
|
|
||||||
return stdout.size() ? stdout.toString().trim() + " (local)" : "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
static def getDate() {
|
|
||||||
return new Date().format("MM/dd/yyyy '<light_purple>at<gold>' hh:mm:ss a z")
|
|
||||||
}
|
|
||||||
|
|
||||||
task buildProperties {
|
|
||||||
ant.propertyfile(file: "$project.projectDir/src/main/resources/build.properties") {
|
|
||||||
entry(key: "buildAuthor", default: System.getenv("JENKINS_URL") != null ? "jenkins" : "unknown")
|
|
||||||
entry(key: "buildNumber", value: System.getenv("JENKINS_URL") != null ? System.getenv("BUILD_NUMBER") + " (Jenkins)" : getBuildNumber())
|
|
||||||
entry(key: "buildDate", value: getDate())
|
|
||||||
entry(key: "buildHead", value: getGitHash())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks {
|
|
||||||
build {
|
|
||||||
dependsOn(shadowJar)
|
|
||||||
finalizedBy(buildProperties)
|
|
||||||
}
|
|
||||||
|
|
||||||
jar {
|
|
||||||
enabled = false
|
|
||||||
}
|
|
||||||
|
|
||||||
shadowJar {
|
|
||||||
finalizedBy(rootProject.tasks.copyJars)
|
|
||||||
}
|
|
||||||
|
|
||||||
javadoc {
|
|
||||||
options.memberLevel = JavadocMemberLevel.PRIVATE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
maven(MavenPublication) {
|
|
||||||
pom.withXml {
|
|
||||||
def dependenciesNode = asNode().appendNode("dependencies")
|
|
||||||
configurations.getByName("library").getAllDependencies().each { dependency ->
|
|
||||||
dependenciesNode.appendNode("dependency").with {
|
|
||||||
it.appendNode("groupId", dependency.group)
|
|
||||||
it.appendNode("artifactId", dependency.name)
|
|
||||||
it.appendNode("version", dependency.version)
|
|
||||||
it.appendNode("scope", "provided")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
configurations.getByName("implementation").getAllDependencies().each { dependency ->
|
|
||||||
dependenciesNode.appendNode("dependency").with {
|
|
||||||
it.appendNode("groupId", dependency.group)
|
|
||||||
it.appendNode("artifactId", dependency.name)
|
|
||||||
it.appendNode("version", dependency.version)
|
|
||||||
it.appendNode("scope", "runtime")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
artifacts = [shadowJar]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
167
server/build.gradle.kts
Normal file
167
server/build.gradle.kts
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
import net.minecrell.pluginyml.paper.PaperPluginDescription
|
||||||
|
import java.io.ByteArrayOutputStream
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("net.kyori.indra.git") version "3.1.3"
|
||||||
|
id("de.eldoria.plugin-yml.paper") version "0.7.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven(url = uri("https://maven.playpro.com"))
|
||||||
|
maven(url = uri("https://nexus.telesphoreo.me/repository/plex-modules/"))
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
library("org.projectlombok:lombok:1.18.38")
|
||||||
|
library("org.json:json:20250107")
|
||||||
|
library("commons-io:commons-io:2.19.0")
|
||||||
|
library("redis.clients:jedis:6.0.0-beta2")
|
||||||
|
library("org.mariadb.jdbc:mariadb-java-client:3.5.3")
|
||||||
|
library("com.zaxxer:HikariCP:6.3.0")
|
||||||
|
library("org.apache.maven.resolver:maven-resolver-transport-http:1.9.22")
|
||||||
|
library("org.jetbrains:annotations:26.0.2")
|
||||||
|
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
|
||||||
|
compileOnly("com.github.MilkBowl:VaultAPI:1.7.1") {
|
||||||
|
exclude("org.bukkit", "bukkit")
|
||||||
|
}
|
||||||
|
compileOnly("net.coreprotect:coreprotect:22.4")
|
||||||
|
compileOnly("network.darkhelmet.prism:Prism-Api:1.0.0")
|
||||||
|
|
||||||
|
implementation("org.bstats:bstats-base:3.1.0")
|
||||||
|
implementation("org.bstats:bstats-bukkit:3.1.0")
|
||||||
|
|
||||||
|
implementation("com.github.LeonMangler:SuperVanish:6.2.18-3")
|
||||||
|
|
||||||
|
annotationProcessor("org.projectlombok:lombok:1.18.38")
|
||||||
|
}
|
||||||
|
|
||||||
|
group = rootProject.group
|
||||||
|
version = rootProject.version
|
||||||
|
description = "Plex-Server"
|
||||||
|
|
||||||
|
paper {
|
||||||
|
name = "Plex"
|
||||||
|
version = rootProject.version.toString()
|
||||||
|
description = "Plex provides a new experience for freedom servers."
|
||||||
|
main = "dev.plex.Plex"
|
||||||
|
loader = "dev.plex.PlexLibraryManager"
|
||||||
|
website = "https://plex.us.org"
|
||||||
|
authors = listOf("Telesphoreo", "taahanis", "supernt")
|
||||||
|
apiVersion = "1.20.5"
|
||||||
|
foliaSupported = true
|
||||||
|
generateLibrariesJson = true
|
||||||
|
// Load BukkitTelnet and LibsDisguises before Plex so the modules register properly
|
||||||
|
serverDependencies {
|
||||||
|
register("BukkitTelnet") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
register("Essentials") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
register("LibsDisguises") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
register("Prism") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
register("CoreProtect") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
register("PremiumVanish") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
register("SlimeWorldManager") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.AFTER
|
||||||
|
}
|
||||||
|
register("SuperVanish") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
register("Vault") {
|
||||||
|
required = false
|
||||||
|
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getBuildNumber(): String {
|
||||||
|
val stdout = ByteArrayOutputStream()
|
||||||
|
try {
|
||||||
|
exec {
|
||||||
|
commandLine("git", "rev-list", "HEAD", "--count")
|
||||||
|
standardOutput = stdout
|
||||||
|
isIgnoreExitValue = true
|
||||||
|
}
|
||||||
|
} catch (e: GradleException) {
|
||||||
|
logger.error("Couldn't determine build number because Git is not installed. " + e.message)
|
||||||
|
}
|
||||||
|
return if (stdout.size() > 0) stdout.toString().trim() else "unknown"
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks {
|
||||||
|
build {
|
||||||
|
dependsOn(shadowJar)
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main {
|
||||||
|
blossom {
|
||||||
|
resources {
|
||||||
|
property("author", if (System.getenv("JENKINS_URL") != null) "jenkins" else System.getProperty("user.name"))
|
||||||
|
property("buildNumber", if (System.getenv("BUILD_NUMBER") != null) System.getenv("BUILD_NUMBER") else getBuildNumber())
|
||||||
|
property("date", SimpleDateFormat("MM/dd/yyyy '<light_purple>at<gold>' hh:mm:ss a z").format(Date()))
|
||||||
|
property("gitCommit", indraGit.commit()?.name?.take(7))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
archiveBaseName.set("Plex")
|
||||||
|
archiveClassifier.set("")
|
||||||
|
relocate("org.bstats", "dev.plex")
|
||||||
|
finalizedBy(rootProject.tasks["copyJars"])
|
||||||
|
}
|
||||||
|
|
||||||
|
javadoc {
|
||||||
|
options.memberLevel = JavadocMemberLevel.PRIVATE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
create<MavenPublication>("maven") {
|
||||||
|
pom.withXml {
|
||||||
|
val dependenciesNode = asNode().appendNode("dependencies")
|
||||||
|
configurations.getByName("library").allDependencies.configureEach {
|
||||||
|
dependenciesNode.appendNode("dependency")
|
||||||
|
.appendNode("groupId", group).parent()
|
||||||
|
.appendNode("artifactId", name).parent()
|
||||||
|
.appendNode("version", version).parent()
|
||||||
|
.appendNode("scope", "provided").parent()
|
||||||
|
}
|
||||||
|
configurations.getByName("implementation").allDependencies.configureEach {
|
||||||
|
dependenciesNode.appendNode("dependency")
|
||||||
|
.appendNode("groupId", group).parent()
|
||||||
|
.appendNode("artifactId", name).parent()
|
||||||
|
.appendNode("version", version).parent()
|
||||||
|
.appendNode("scope", "provided").parent()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
artifacts.artifact(tasks.shadowJar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +1,19 @@
|
|||||||
package dev.plex;
|
package dev.plex;
|
||||||
|
|
||||||
import dev.plex.admin.Admin;
|
|
||||||
import dev.plex.admin.AdminList;
|
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.cache.PlayerCache;
|
import dev.plex.cache.PlayerCache;
|
||||||
import dev.plex.config.Config;
|
import dev.plex.config.Config;
|
||||||
import dev.plex.handlers.CommandHandler;
|
import dev.plex.handlers.CommandHandler;
|
||||||
import dev.plex.handlers.ListenerHandler;
|
import dev.plex.handlers.ListenerHandler;
|
||||||
|
import dev.plex.hook.CoreProtectHook;
|
||||||
|
import dev.plex.hook.PrismHook;
|
||||||
import dev.plex.module.ModuleManager;
|
import dev.plex.module.ModuleManager;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.PunishmentManager;
|
import dev.plex.punishment.PunishmentManager;
|
||||||
import dev.plex.rank.RankManager;
|
|
||||||
import dev.plex.services.ServiceManager;
|
import dev.plex.services.ServiceManager;
|
||||||
import dev.plex.storage.MongoConnection;
|
|
||||||
import dev.plex.storage.RedisConnection;
|
import dev.plex.storage.RedisConnection;
|
||||||
import dev.plex.storage.SQLConnection;
|
import dev.plex.storage.SQLConnection;
|
||||||
import dev.plex.storage.StorageType;
|
import dev.plex.storage.StorageType;
|
||||||
import dev.plex.storage.permission.SQLPermissions;
|
|
||||||
import dev.plex.storage.player.MongoPlayerData;
|
|
||||||
import dev.plex.storage.player.SQLPlayerData;
|
import dev.plex.storage.player.SQLPlayerData;
|
||||||
import dev.plex.storage.punishment.SQLNotes;
|
import dev.plex.storage.punishment.SQLNotes;
|
||||||
import dev.plex.storage.punishment.SQLPunishment;
|
import dev.plex.storage.punishment.SQLPunishment;
|
||||||
@ -52,30 +48,24 @@ public class Plex extends JavaPlugin
|
|||||||
public File modulesFolder;
|
public File modulesFolder;
|
||||||
private StorageType storageType = StorageType.SQLITE;
|
private StorageType storageType = StorageType.SQLITE;
|
||||||
private SQLConnection sqlConnection;
|
private SQLConnection sqlConnection;
|
||||||
private MongoConnection mongoConnection;
|
|
||||||
private RedisConnection redisConnection;
|
private RedisConnection redisConnection;
|
||||||
|
|
||||||
private PlayerCache playerCache;
|
private PlayerCache playerCache;
|
||||||
|
|
||||||
private MongoPlayerData mongoPlayerData;
|
|
||||||
private SQLPlayerData sqlPlayerData;
|
private SQLPlayerData sqlPlayerData;
|
||||||
|
|
||||||
private SQLPunishment sqlPunishment;
|
private SQLPunishment sqlPunishment;
|
||||||
private SQLNotes sqlNotes;
|
private SQLNotes sqlNotes;
|
||||||
private SQLPermissions sqlPermissions;
|
|
||||||
|
|
||||||
private ModuleManager moduleManager;
|
private ModuleManager moduleManager;
|
||||||
private RankManager rankManager;
|
|
||||||
private ServiceManager serviceManager;
|
private ServiceManager serviceManager;
|
||||||
private PunishmentManager punishmentManager;
|
private PunishmentManager punishmentManager;
|
||||||
|
|
||||||
private AdminList adminList;
|
|
||||||
private UpdateChecker updateChecker;
|
private UpdateChecker updateChecker;
|
||||||
private String system;
|
|
||||||
|
|
||||||
private Permission permissions;
|
private Permission permissions;
|
||||||
private Chat chat;
|
private Chat chat;
|
||||||
|
|
||||||
|
private CoreProtectHook coreProtectHook;
|
||||||
|
private PrismHook prismHook;
|
||||||
|
|
||||||
public static Plex get()
|
public static Plex get()
|
||||||
{
|
{
|
||||||
@ -119,13 +109,10 @@ public class Plex extends JavaPlugin
|
|||||||
commands.load(false);
|
commands.load(false);
|
||||||
|
|
||||||
sqlConnection = new SQLConnection();
|
sqlConnection = new SQLConnection();
|
||||||
mongoConnection = new MongoConnection();
|
|
||||||
redisConnection = new RedisConnection();
|
redisConnection = new RedisConnection();
|
||||||
|
|
||||||
playerCache = new PlayerCache();
|
playerCache = new PlayerCache();
|
||||||
|
|
||||||
system = config.getString("system");
|
|
||||||
|
|
||||||
PlexLog.log("Attempting to connect to DB: {0}", plugin.config.getString("data.central.db"));
|
PlexLog.log("Attempting to connect to DB: {0}", plugin.config.getString("data.central.db"));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -138,15 +125,38 @@ public class Plex extends JavaPlugin
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (system.equals("permissions"))
|
|
||||||
{
|
|
||||||
if (!getServer().getPluginManager().isPluginEnabled("Vault"))
|
if (!getServer().getPluginManager().isPluginEnabled("Vault"))
|
||||||
{
|
{
|
||||||
throw new RuntimeException("Vault is required to run on the server if you use permissions!");
|
throw new RuntimeException("Vault is required to run on the server alongside a permissions plugin, we recommend LuckPerms!");
|
||||||
}
|
}
|
||||||
|
|
||||||
permissions = setupPermissions();
|
permissions = setupPermissions();
|
||||||
chat = setupChat();
|
chat = setupChat();
|
||||||
|
|
||||||
|
if (plugin.getServer().getPluginManager().isPluginEnabled("CoreProtect"))
|
||||||
|
{
|
||||||
|
PlexLog.log("Hooked into CoreProtect!");
|
||||||
|
coreProtectHook = new CoreProtectHook(this);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlexLog.debug("Not hooking into CoreProtect");
|
||||||
|
}
|
||||||
|
if (plugin.getServer().getPluginManager().isPluginEnabled("Prism"))
|
||||||
|
{
|
||||||
|
PlexLog.log("Hooked into Prism!");
|
||||||
|
prismHook = new PrismHook(this);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlexLog.debug("Not hooking into Prism");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PlexUtils.hasVanishPlugin())
|
||||||
|
{
|
||||||
|
PlexLog.log("Hooked into SuperVanish / PremiumVanish!");
|
||||||
|
} else {
|
||||||
|
PlexLog.debug("Not hooking into SuperVanish / PremiumVanish");
|
||||||
}
|
}
|
||||||
|
|
||||||
updateChecker = new UpdateChecker();
|
updateChecker = new UpdateChecker();
|
||||||
@ -168,32 +178,22 @@ public class Plex extends JavaPlugin
|
|||||||
PlexLog.log("Redis is disabled in the configuration file, not connecting.");
|
PlexLog.log("Redis is disabled in the configuration file, not connecting.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (storageType == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
mongoPlayerData = new MongoPlayerData();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sqlPlayerData = new SQLPlayerData();
|
sqlPlayerData = new SQLPlayerData();
|
||||||
sqlPunishment = new SQLPunishment();
|
sqlPunishment = new SQLPunishment();
|
||||||
sqlNotes = new SQLNotes();
|
sqlNotes = new SQLNotes();
|
||||||
sqlPermissions = new SQLPermissions();
|
|
||||||
}
|
|
||||||
|
|
||||||
new ListenerHandler();
|
new ListenerHandler();
|
||||||
new CommandHandler();
|
new CommandHandler();
|
||||||
|
|
||||||
rankManager = new RankManager();
|
|
||||||
rankManager.generateDefaultRanks();
|
|
||||||
rankManager.importDefaultRanks();
|
|
||||||
adminList = new AdminList();
|
|
||||||
PlexLog.log("Rank Manager initialized");
|
|
||||||
|
|
||||||
punishmentManager = new PunishmentManager();
|
punishmentManager = new PunishmentManager();
|
||||||
punishmentManager.mergeIndefiniteBans();
|
punishmentManager.mergeIndefiniteBans();
|
||||||
PlexLog.log("Punishment System initialized");
|
PlexLog.log("Punishment System initialized");
|
||||||
|
|
||||||
|
if (!PlexUtils.isFolia())
|
||||||
|
{
|
||||||
|
// World generation is not supported on Folia yet
|
||||||
generateWorlds();
|
generateWorlds();
|
||||||
|
}
|
||||||
|
|
||||||
serviceManager = new ServiceManager();
|
serviceManager = new ServiceManager();
|
||||||
PlexLog.log("Service Manager initialized");
|
PlexLog.log("Service Manager initialized");
|
||||||
@ -219,20 +219,7 @@ public class Plex extends JavaPlugin
|
|||||||
Bukkit.getOnlinePlayers().forEach(player ->
|
Bukkit.getOnlinePlayers().forEach(player ->
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = playerCache.getPlexPlayerMap().get(player.getUniqueId()); //get the player because it's literally impossible for them to not have an object
|
PlexPlayer plexPlayer = playerCache.getPlexPlayerMap().get(player.getUniqueId()); //get the player because it's literally impossible for them to not have an object
|
||||||
|
|
||||||
if (plugin.getRankManager().isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
plugin.getAdminList().removeFromCache(plexPlayer.getUuid());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mongoPlayerData != null) //back to mongo checking
|
|
||||||
{
|
|
||||||
mongoPlayerData.update(plexPlayer); //update the player's document
|
|
||||||
}
|
|
||||||
else if (sqlPlayerData != null) //sql checking
|
|
||||||
{
|
|
||||||
sqlPlayerData.update(plexPlayer);
|
sqlPlayerData.update(plexPlayer);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
if (redisConnection != null && redisConnection.isEnabled() && redisConnection.getJedis().isConnected())
|
if (redisConnection != null && redisConnection.isEnabled() && redisConnection.getJedis().isConnected())
|
||||||
{
|
{
|
||||||
@ -261,13 +248,6 @@ public class Plex extends JavaPlugin
|
|||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
||||||
playerCache.getPlexPlayerMap().put(player.getUniqueId(), plexPlayer); //put them into the cache
|
playerCache.getPlexPlayerMap().put(player.getUniqueId(), plexPlayer); //put them into the cache
|
||||||
if (plugin.getRankManager().isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
Admin admin = new Admin(plexPlayer.getUuid());
|
|
||||||
admin.setRank(plexPlayer.getRankFromString());
|
|
||||||
|
|
||||||
plugin.getAdminList().addToCache(admin);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
64
server/src/main/java/dev/plex/PlexLibraryManager.java
Normal file
64
server/src/main/java/dev/plex/PlexLibraryManager.java
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package dev.plex;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import io.papermc.paper.plugin.loader.PluginClasspathBuilder;
|
||||||
|
import io.papermc.paper.plugin.loader.PluginLoader;
|
||||||
|
import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import org.eclipse.aether.artifact.DefaultArtifact;
|
||||||
|
import org.eclipse.aether.graph.Dependency;
|
||||||
|
import org.eclipse.aether.repository.RemoteRepository;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class PlexLibraryManager implements PluginLoader
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void classloader(@NotNull PluginClasspathBuilder classpathBuilder)
|
||||||
|
{
|
||||||
|
MavenLibraryResolver resolver = new MavenLibraryResolver();
|
||||||
|
PluginLibraries pluginLibraries = load();
|
||||||
|
pluginLibraries.asDependencies().forEach(resolver::addDependency);
|
||||||
|
pluginLibraries.asRepositories().forEach(resolver::addRepository);
|
||||||
|
// The plugin is null, a hacky way to check whether to load Jetty or not
|
||||||
|
if (new File("plugins/Plex/modules/Module-HTTPD.jar").isFile())
|
||||||
|
{
|
||||||
|
resolver.addDependency(new Dependency(new DefaultArtifact("org.eclipse.jetty:jetty-server:12.0.14"), null));
|
||||||
|
resolver.addDependency(new Dependency(new DefaultArtifact("org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.14"), null));
|
||||||
|
resolver.addDependency(new Dependency(new DefaultArtifact("org.eclipse.jetty:jetty-proxy:12.0.14"), null));
|
||||||
|
}
|
||||||
|
classpathBuilder.addLibrary(resolver);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PluginLibraries load()
|
||||||
|
{
|
||||||
|
try (var in = getClass().getResourceAsStream("/paper-libraries.json"))
|
||||||
|
{
|
||||||
|
return new Gson().fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), PluginLibraries.class);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private record PluginLibraries(Map<String, String> repositories, List<String> dependencies)
|
||||||
|
{
|
||||||
|
public Stream<Dependency> asDependencies()
|
||||||
|
{
|
||||||
|
return dependencies.stream()
|
||||||
|
.map(d -> new Dependency(new DefaultArtifact(d), null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Stream<RemoteRepository> asRepositories()
|
||||||
|
{
|
||||||
|
return repositories.entrySet().stream()
|
||||||
|
.map(e -> new RemoteRepository.Builder(e.getKey(), "default", e.getValue()).build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,55 +0,0 @@
|
|||||||
package dev.plex.admin;
|
|
||||||
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import java.util.UUID;
|
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Admin object to handle cached admins
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
public class Admin
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Gets the unique ID of an admin (immutable)
|
|
||||||
*/
|
|
||||||
@Setter(AccessLevel.NONE)
|
|
||||||
private UUID uuid;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the rank of the admin
|
|
||||||
* <br>
|
|
||||||
* Contains a #setRank and #getRank by lombok
|
|
||||||
*/
|
|
||||||
private Rank rank;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if the admin has command spy or not
|
|
||||||
* <br>
|
|
||||||
* Contains a #isCommandSpy and #setCommandSpy by Lombok
|
|
||||||
*/
|
|
||||||
private boolean commandSpy = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if the admin has admin chat toggled or not
|
|
||||||
* <br>
|
|
||||||
* Contains a #isAdminChat and #setAdminChat by Lombok
|
|
||||||
*/
|
|
||||||
private boolean adminChat = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an admin with the ADMIN rank as the default rank
|
|
||||||
*
|
|
||||||
* @param uuid
|
|
||||||
* @see UUID
|
|
||||||
* @see Rank
|
|
||||||
*/
|
|
||||||
public Admin(UUID uuid)
|
|
||||||
{
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.rank = Rank.ADMIN;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,150 +0,0 @@
|
|||||||
package dev.plex.admin;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import com.google.common.reflect.TypeToken;
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import dev.morphia.Datastore;
|
|
||||||
import dev.morphia.query.Query;
|
|
||||||
import dev.plex.PlexBase;
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.storage.StorageType;
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cached storage for Admin objects
|
|
||||||
*
|
|
||||||
* @see Admin
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class AdminList implements PlexBase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Key / Value storage, where the key is the unique ID of the admin
|
|
||||||
*/
|
|
||||||
private final Map<UUID, Admin> admins = Maps.newHashMap();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the admin to cache
|
|
||||||
*
|
|
||||||
* @param admin The admin object
|
|
||||||
*/
|
|
||||||
public void addToCache(Admin admin)
|
|
||||||
{
|
|
||||||
admins.put(admin.getUuid(), admin);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes an admin from the cache
|
|
||||||
*
|
|
||||||
* @param uuid The unique ID of the admin
|
|
||||||
* @see UUID
|
|
||||||
*/
|
|
||||||
public void removeFromCache(UUID uuid)
|
|
||||||
{
|
|
||||||
admins.remove(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gathers every admins username (cached and in the database)
|
|
||||||
*
|
|
||||||
* @return An array list of the names of every admin
|
|
||||||
*/
|
|
||||||
public List<String> getAllAdmins()
|
|
||||||
{
|
|
||||||
List<String> admins = Lists.newArrayList();
|
|
||||||
if (plugin.getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
Datastore store = plugin.getMongoConnection().getDatastore();
|
|
||||||
Query<PlexPlayer> query = store.find(PlexPlayer.class);
|
|
||||||
admins.addAll(query.stream().filter(plexPlayer -> plexPlayer.getRankFromString().isAtLeast(Rank.ADMIN) && plexPlayer.isAdminActive()).map(PlexPlayer::getName).toList());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try (Connection con = plugin.getSqlConnection().getCon())
|
|
||||||
{
|
|
||||||
PreparedStatement statement = con.prepareStatement("SELECT * FROM `players` WHERE rank IN(?, ?, ?) AND adminActive=true");
|
|
||||||
statement.setString(1, Rank.ADMIN.name().toLowerCase());
|
|
||||||
statement.setString(2, Rank.SENIOR_ADMIN.name().toLowerCase());
|
|
||||||
statement.setString(3, Rank.EXECUTIVE.name().toLowerCase());
|
|
||||||
|
|
||||||
ResultSet set = statement.executeQuery();
|
|
||||||
while (set.next())
|
|
||||||
{
|
|
||||||
admins.add(set.getString("name"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException throwables)
|
|
||||||
{
|
|
||||||
throwables.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return admins;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gathers every admin (cached and in the database)
|
|
||||||
*
|
|
||||||
* @return An array list of the names of every admin
|
|
||||||
*/
|
|
||||||
public List<PlexPlayer> getAllAdminPlayers()
|
|
||||||
{
|
|
||||||
List<PlexPlayer> plexPlayers = Lists.newArrayList();
|
|
||||||
if (plugin.getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
Datastore store = plugin.getMongoConnection().getDatastore();
|
|
||||||
Query<PlexPlayer> query = store.find(PlexPlayer.class);
|
|
||||||
return query.stream().toList().stream().filter(player -> plugin.getRankManager().isAdmin(player)).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try (Connection con = plugin.getSqlConnection().getCon())
|
|
||||||
{
|
|
||||||
PreparedStatement statement = con.prepareStatement("SELECT * FROM `players` WHERE rank IN(?, ?, ?) AND adminActive=true");
|
|
||||||
statement.setString(1, Rank.ADMIN.name().toLowerCase());
|
|
||||||
statement.setString(2, Rank.SENIOR_ADMIN.name().toLowerCase());
|
|
||||||
statement.setString(3, Rank.EXECUTIVE.name().toLowerCase());
|
|
||||||
|
|
||||||
ResultSet set = statement.executeQuery();
|
|
||||||
while (set.next())
|
|
||||||
{
|
|
||||||
String uuid = set.getString("uuid");
|
|
||||||
String name = set.getString("name");
|
|
||||||
String loginMSG = set.getString("login_msg");
|
|
||||||
String prefix = set.getString("prefix");
|
|
||||||
String rankName = set.getString("rank").toUpperCase();
|
|
||||||
long coins = set.getLong("coins");
|
|
||||||
boolean vanished = set.getBoolean("vanished");
|
|
||||||
boolean commandspy = set.getBoolean("commandspy");
|
|
||||||
List<String> ips = new Gson().fromJson(set.getString("ips"), new TypeToken<List<String>>()
|
|
||||||
{
|
|
||||||
}.getType());
|
|
||||||
|
|
||||||
PlexPlayer plexPlayer = new PlexPlayer(UUID.fromString(uuid));
|
|
||||||
plexPlayer.setName(name);
|
|
||||||
plexPlayer.setLoginMessage(loginMSG);
|
|
||||||
plexPlayer.setPrefix(prefix);
|
|
||||||
plexPlayer.setRank(rankName);
|
|
||||||
plexPlayer.setIps(ips);
|
|
||||||
plexPlayer.setCoins(coins);
|
|
||||||
plexPlayer.setVanished(vanished);
|
|
||||||
plexPlayer.setCommandSpy(commandspy);
|
|
||||||
plexPlayers.add(plexPlayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException throwables)
|
|
||||||
{
|
|
||||||
throwables.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return plexPlayers;
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,7 +2,6 @@ package dev.plex.cache;
|
|||||||
|
|
||||||
import dev.plex.Plex;
|
import dev.plex.Plex;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.storage.StorageType;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -18,28 +17,14 @@ public class DataUtils
|
|||||||
* @return true if the player is registered in the database
|
* @return true if the player is registered in the database
|
||||||
*/
|
*/
|
||||||
public static boolean hasPlayedBefore(UUID uuid)
|
public static boolean hasPlayedBefore(UUID uuid)
|
||||||
{
|
|
||||||
if (Plex.get().getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
return Plex.get().getMongoPlayerData().exists(uuid);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return Plex.get().getSqlPlayerData().exists(uuid);
|
return Plex.get().getSqlPlayerData().exists(uuid);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean hasPlayedBefore(String username)
|
public static boolean hasPlayedBefore(String username)
|
||||||
{
|
|
||||||
if (Plex.get().getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
return Plex.get().getMongoPlayerData().exists(username);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return Plex.get().getSqlPlayerData().exists(username);
|
return Plex.get().getSqlPlayerData().exists(username);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a player from cache or from the database
|
* Gets a player from cache or from the database
|
||||||
@ -60,15 +45,8 @@ public class DataUtils
|
|||||||
return Plex.get().getPlayerCache().getPlexPlayerMap().get(uuid);
|
return Plex.get().getPlayerCache().getPlexPlayerMap().get(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Plex.get().getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
return Plex.get().getMongoPlayerData().getByUUID(uuid);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Plex.get().getSqlPlayerData().getByUUID(uuid, loadExtraData);
|
return Plex.get().getSqlPlayerData().getByUUID(uuid, loadExtraData);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static PlexPlayer getPlayer(String username)
|
public static PlexPlayer getPlayer(String username)
|
||||||
{
|
{
|
||||||
@ -83,15 +61,8 @@ public class DataUtils
|
|||||||
return plexPlayer.get();
|
return plexPlayer.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Plex.get().getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
return Plex.get().getMongoPlayerData().getByName(username);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Plex.get().getSqlPlayerData().getByName(username, loadExtraData);
|
return Plex.get().getSqlPlayerData().getByName(username, loadExtraData);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a player from cache or from the database
|
* Gets a player from cache or from the database
|
||||||
@ -108,15 +79,8 @@ public class DataUtils
|
|||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Plex.get().getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
return Plex.get().getMongoPlayerData().getByIP(ip);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Plex.get().getSqlPlayerData().getByIP(ip);
|
return Plex.get().getSqlPlayerData().getByIP(ip);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates a player's information in the database
|
* Updates a player's information in the database
|
||||||
@ -125,16 +89,9 @@ public class DataUtils
|
|||||||
* @see PlexPlayer
|
* @see PlexPlayer
|
||||||
*/
|
*/
|
||||||
public static void update(PlexPlayer plexPlayer)
|
public static void update(PlexPlayer plexPlayer)
|
||||||
{
|
|
||||||
if (Plex.get().getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
Plex.get().getMongoPlayerData().update(plexPlayer);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
Plex.get().getSqlPlayerData().update(plexPlayer);
|
Plex.get().getSqlPlayerData().update(plexPlayer);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserts a player's information in the database
|
* Inserts a player's information in the database
|
||||||
@ -143,17 +100,8 @@ public class DataUtils
|
|||||||
* @see PlexPlayer
|
* @see PlexPlayer
|
||||||
*/
|
*/
|
||||||
public static void insert(PlexPlayer plexPlayer)
|
public static void insert(PlexPlayer plexPlayer)
|
||||||
{
|
|
||||||
if (Plex.get().getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
Plex.get().getMongoPlayerData().save(plexPlayer);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
Plex.get().getSqlPlayerData().insert(plexPlayer);
|
Plex.get().getSqlPlayerData().insert(plexPlayer);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* REDIS METHODS AT ONE POINT FOR BANS, AND JSON METHODS FOR PUNISHMENTS */
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package dev.plex.command;
|
package dev.plex.command;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import dev.plex.Plex;
|
import dev.plex.Plex;
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
@ -11,17 +12,16 @@ import dev.plex.command.exception.PlayerNotBannedException;
|
|||||||
import dev.plex.command.exception.PlayerNotFoundException;
|
import dev.plex.command.exception.PlayerNotFoundException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import net.kyori.adventure.audience.Audience;
|
import net.kyori.adventure.audience.Audience;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandMap;
|
import org.bukkit.command.CommandMap;
|
||||||
@ -29,6 +29,7 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.command.PluginIdentifiableCommand;
|
import org.bukkit.command.PluginIdentifiableCommand;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -52,11 +53,6 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
*/
|
*/
|
||||||
private final CommandPermissions perms;
|
private final CommandPermissions perms;
|
||||||
|
|
||||||
/**
|
|
||||||
* Minimum required rank fetched from the permissions
|
|
||||||
*/
|
|
||||||
private final Rank level;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required command source fetched from the permissions
|
* Required command source fetched from the permissions
|
||||||
*/
|
*/
|
||||||
@ -74,16 +70,27 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
setName(this.params.name());
|
setName(this.params.name());
|
||||||
setLabel(this.params.name());
|
setLabel(this.params.name());
|
||||||
setDescription(params.description());
|
setDescription(params.description());
|
||||||
|
setPermission(this.perms.permission());
|
||||||
setUsage(params.usage().replace("<command>", this.params.name()));
|
setUsage(params.usage().replace("<command>", this.params.name()));
|
||||||
if (params.aliases().split(",").length > 0)
|
if (params.aliases().split(",").length > 0)
|
||||||
{
|
{
|
||||||
setAliases(Arrays.asList(params.aliases().split(",")));
|
setAliases(Arrays.asList(params.aliases().split(",")));
|
||||||
}
|
}
|
||||||
this.level = perms.level();
|
|
||||||
this.commandSource = perms.source();
|
this.commandSource = perms.source();
|
||||||
|
|
||||||
if (register)
|
if (register)
|
||||||
{
|
{
|
||||||
|
if (getMap().getKnownCommands().containsKey(this.getName().toLowerCase()))
|
||||||
|
{
|
||||||
|
getMap().getKnownCommands().remove(this.getName().toLowerCase());
|
||||||
|
}
|
||||||
|
this.getAliases().forEach(s ->
|
||||||
|
{
|
||||||
|
if (getMap().getKnownCommands().containsKey(s.toLowerCase()))
|
||||||
|
{
|
||||||
|
getMap().getKnownCommands().remove(s.toLowerCase());
|
||||||
|
}
|
||||||
|
});
|
||||||
getMap().register("plex", this);
|
getMap().register("plex", this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -137,73 +144,23 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
if (!plexPlayer.getRankFromString().isAtLeast(getLevel()))
|
|
||||||
{
|
|
||||||
send(sender, messageComponent("noPermissionRank", ChatColor.stripColor(getLevel().getLoginMessage())));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (getLevel().isAtLeast(Rank.ADMIN) && !plexPlayer.isAdminActive())
|
|
||||||
{
|
|
||||||
send(sender, messageComponent("noPermissionRank", ChatColor.stripColor(getLevel().getLoginMessage())));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
if (!perms.permission().isEmpty() && !player.hasPermission(perms.permission()))
|
if (!perms.permission().isEmpty() && !player.hasPermission(perms.permission()))
|
||||||
{
|
{
|
||||||
send(sender, messageComponent("noPermissionNode", perms.permission()));
|
send(sender, messageComponent("noPermissionNode", perms.permission()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
PlexLog.error("Neither permissions or ranks were selected to be used in the configuration file!");
|
|
||||||
send(sender, "There is a server misconfiguration. Please alert a developer or the owner");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sender instanceof ConsoleCommandSender && !sender.getName().equalsIgnoreCase("console")) //telnet
|
if (sender instanceof ConsoleCommandSender && !sender.getName().equalsIgnoreCase("console")) //telnet
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(sender.getName());
|
PlexPlayer plexPlayer = DataUtils.getPlayer(sender.getName());
|
||||||
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
if (!plexPlayer.getRankFromString().isAtLeast(getLevel()))
|
|
||||||
{
|
|
||||||
send(sender, messageComponent("noPermissionRank", ChatColor.stripColor(getLevel().getLoginMessage())));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (getLevel().isAtLeast(Rank.ADMIN) && !plexPlayer.isAdminActive())
|
|
||||||
{
|
|
||||||
send(sender, messageComponent("noPermissionRank", ChatColor.stripColor(getLevel().getLoginMessage())));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
if (!perms.permission().isEmpty() && !plugin.getPermissions().playerHas(null, Bukkit.getPlayer(plexPlayer.getName()), perms.permission()))
|
if (!perms.permission().isEmpty() && !plugin.getPermissions().playerHas(null, Bukkit.getPlayer(plexPlayer.getName()), perms.permission()))
|
||||||
{
|
{
|
||||||
send(sender, messageComponent("noPermissionNode", perms.permission()));
|
send(sender, messageComponent("noPermissionNode", perms.permission()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
PlexLog.error("Neither permissions or ranks were selected to be used in the configuration file!");
|
|
||||||
send(sender, "There is a server misconfiguration. Please alert a developer or the owner");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Component component = this.execute(sender, isConsole(sender) ? null : (Player) sender, args);
|
Component component = this.execute(sender, isConsole(sender) ? null : (Player) sender, args);
|
||||||
@ -220,6 +177,17 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public abstract List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
List<String> list = smartTabComplete(sender, alias, args);
|
||||||
|
return StringUtil.copyPartialMatches(args[args.length - 1], list, Lists.newArrayList());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the String given is a matching command
|
* Checks if the String given is a matching command
|
||||||
*
|
*
|
||||||
@ -283,111 +251,31 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
* Checks whether a sender has enough permissions or is high enough a rank
|
* Checks whether a sender has enough permissions or is high enough a rank
|
||||||
*
|
*
|
||||||
* @param sender A CommandSender
|
* @param sender A CommandSender
|
||||||
* @param rank The rank to check (if the server is using ranks)
|
* @param permission The permission to check
|
||||||
* @param permission The permission to check (if the server is using permissions)
|
|
||||||
* @return true if the sender has enough permissions
|
* @return true if the sender has enough permissions
|
||||||
* @see Rank
|
|
||||||
*/
|
*/
|
||||||
protected boolean checkRank(CommandSender sender, Rank rank, String permission)
|
protected boolean checkPermission(CommandSender sender, String permission)
|
||||||
{
|
{
|
||||||
if (!isConsole(sender))
|
if (!isConsole(sender))
|
||||||
{
|
{
|
||||||
return checkRank((Player)sender, rank, permission);
|
return checkPermission((Player) sender, permission);
|
||||||
}
|
|
||||||
if (!sender.getName().equalsIgnoreCase("console"))
|
|
||||||
{
|
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(sender.getName());
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
if (!plexPlayer.getRankFromString().isAtLeast(rank))
|
|
||||||
{
|
|
||||||
throw new CommandFailException(PlexUtils.messageString("noPermissionRank", ChatColor.stripColor(rank.getLoginMessage())));
|
|
||||||
}
|
|
||||||
if (rank.isAtLeast(Rank.ADMIN) && !plexPlayer.isAdminActive())
|
|
||||||
{
|
|
||||||
throw new CommandFailException(PlexUtils.messageString("noPermissionRank", ChatColor.stripColor(rank.getLoginMessage())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
if (!perms.permission().isEmpty() && !plugin.getPermissions().playerHas(null, Bukkit.getOfflinePlayer(plexPlayer.getName()), perms.permission()))
|
|
||||||
{
|
|
||||||
throw new CommandFailException(PlexUtils.messageString("noPermissionNode", permission));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether a player has enough permissions or is high enough a rank
|
|
||||||
*
|
|
||||||
* @param player The player object
|
|
||||||
* @param rank The rank to check (if the server is using ranks)
|
|
||||||
* @param permission The permission to check (if the server is using permissions)
|
|
||||||
* @return true if the sender has enough permissions
|
|
||||||
* @see Rank
|
|
||||||
*/
|
|
||||||
protected boolean checkRank(Player player, Rank rank, String permission)
|
|
||||||
{
|
|
||||||
if (player instanceof ConsoleCommandSender)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
PlexPlayer plexPlayer = getPlexPlayer(player);
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
if (!plexPlayer.getRankFromString().isAtLeast(rank))
|
|
||||||
{
|
|
||||||
throw new CommandFailException(PlexUtils.messageString("noPermissionRank", ChatColor.stripColor(rank.getLoginMessage())));
|
|
||||||
}
|
|
||||||
if (rank.isAtLeast(Rank.ADMIN) && !plexPlayer.isAdminActive())
|
|
||||||
{
|
|
||||||
throw new CommandFailException(PlexUtils.messageString("noPermissionRank", ChatColor.stripColor(rank.getLoginMessage())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
if (!perms.permission().isEmpty() && !player.hasPermission(perms.permission()))
|
|
||||||
{
|
|
||||||
throw new CommandFailException(PlexUtils.messageString("noPermissionNode", permission));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean silentCheckRank(Player player, Rank rank, String permission)
|
|
||||||
{
|
|
||||||
if (player instanceof ConsoleCommandSender)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
PlexPlayer plexPlayer = getPlexPlayer(player);
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
return rank.isAtLeast(Rank.ADMIN) ? plexPlayer.isAdminActive() && plexPlayer.getRankFromString().isAtLeast(rank) : plexPlayer.getRankFromString().isAtLeast(rank);
|
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
return !perms.permission().isEmpty() && player.hasPermission(permission);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether a sender has enough permissions or is high enough a rank
|
* Checks whether a sender has enough permissions or is high enough a rank
|
||||||
*
|
*
|
||||||
* @param sender The player object
|
* @param sender A CommandSender
|
||||||
* @param rank The rank to check (if the server is using ranks)
|
* @param permission The permission to check
|
||||||
* @param permission The permission to check (if the server is using permissions)
|
|
||||||
* @return true if the sender has enough permissions
|
* @return true if the sender has enough permissions
|
||||||
* @see Rank
|
|
||||||
*/
|
*/
|
||||||
protected boolean checkTab(CommandSender sender, Rank rank, String permission)
|
protected boolean silentCheckPermission(CommandSender sender, String permission)
|
||||||
{
|
{
|
||||||
|
PlexLog.debug("Checking {0} with {1}", sender.getName(), permission);
|
||||||
if (!isConsole(sender))
|
if (!isConsole(sender))
|
||||||
{
|
{
|
||||||
return checkTab((Player)sender, rank, permission);
|
return silentCheckPermission((Player) sender, permission);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -396,79 +284,25 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
* Checks whether a player has enough permissions or is high enough a rank
|
* Checks whether a player has enough permissions or is high enough a rank
|
||||||
*
|
*
|
||||||
* @param player The player object
|
* @param player The player object
|
||||||
* @param rank The rank to check (if the server is using ranks)
|
* @param permission The permission to check
|
||||||
* @param permission The permission to check (if the server is using permissions)
|
|
||||||
* @return true if the sender has enough permissions
|
* @return true if the sender has enough permissions
|
||||||
* @see Rank
|
|
||||||
*/
|
*/
|
||||||
protected boolean checkTab(Player player, Rank rank, String permission)
|
protected boolean checkPermission(Player player, String permission)
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = getPlexPlayer(player);
|
if (player instanceof ConsoleCommandSender)
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
{
|
||||||
return rank.isAtLeast(Rank.ADMIN) ? plexPlayer.isAdminActive() && plexPlayer.getRankFromString().isAtLeast(rank) : plexPlayer.getRankFromString().isAtLeast(rank);
|
return true;
|
||||||
}
|
}
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
if (!permission.isEmpty() && !player.hasPermission(permission))
|
||||||
{
|
{
|
||||||
return !perms.permission().isEmpty() && player.hasPermission(permission);
|
throw new CommandFailException(PlexUtils.messageString("noPermissionNode", permission));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected boolean silentCheckPermission(Player player, String permission)
|
||||||
* Checks if a player is an admin
|
|
||||||
*
|
|
||||||
* @param plexPlayer The PlexPlayer object
|
|
||||||
* @return true if the player is an admin
|
|
||||||
* @see PlexPlayer
|
|
||||||
*/
|
|
||||||
protected boolean isAdmin(PlexPlayer plexPlayer)
|
|
||||||
{
|
{
|
||||||
return Plex.get().getRankManager().isAdmin(plexPlayer);
|
return !permission.isEmpty() && player.hasPermission(permission);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a sender is an admin
|
|
||||||
*
|
|
||||||
* @param sender A command sender
|
|
||||||
* @return true if the sender is an admin or if console
|
|
||||||
*/
|
|
||||||
protected boolean isAdmin(CommandSender sender)
|
|
||||||
{
|
|
||||||
if (!(sender instanceof Player player))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
PlexPlayer plexPlayer = getPlexPlayer(player);
|
|
||||||
return plugin.getRankManager().isAdmin(plexPlayer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a username is an admin
|
|
||||||
*
|
|
||||||
* @param name The username
|
|
||||||
* @return true if the username is an admin
|
|
||||||
*/
|
|
||||||
protected boolean isAdmin(String name)
|
|
||||||
{
|
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(name);
|
|
||||||
return plugin.getRankManager().isAdmin(plexPlayer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a sender is a senior admin
|
|
||||||
*
|
|
||||||
* @param sender A command sender
|
|
||||||
* @return true if the sender is a senior admin or if console
|
|
||||||
*/
|
|
||||||
protected boolean isSeniorAdmin(CommandSender sender)
|
|
||||||
{
|
|
||||||
if (!(sender instanceof Player player))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
PlexPlayer plexPlayer = getPlexPlayer(player);
|
|
||||||
return plugin.getRankManager().isSeniorAdmin(plexPlayer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -646,11 +480,6 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
return PlexUtils.mmDeserialize(s);
|
return PlexUtils.mmDeserialize(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rank getLevel()
|
|
||||||
{
|
|
||||||
return level;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CommandMap getMap()
|
public CommandMap getMap()
|
||||||
{
|
{
|
||||||
return Plex.get().getServer().getCommandMap();
|
return Plex.get().getServer().getCommandMap();
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package dev.plex.command.annotation;
|
package dev.plex.command.annotation;
|
||||||
|
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
@ -11,14 +10,6 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
public @interface CommandPermissions
|
public @interface CommandPermissions
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Minimum rank required
|
|
||||||
*
|
|
||||||
* @return Minimum rank required for the command
|
|
||||||
* @see Rank
|
|
||||||
*/
|
|
||||||
Rank level() default Rank.IMPOSTOR;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required command source
|
* Required command source
|
||||||
*
|
*
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
package dev.plex.command.annotation;
|
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
public @interface System
|
|
||||||
{
|
|
||||||
String value() default "";
|
|
||||||
|
|
||||||
boolean debug() default false;
|
|
||||||
}
|
|
@ -1,186 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import dev.plex.cache.DataUtils;
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.command.annotation.System;
|
|
||||||
import dev.plex.command.exception.ConsoleOnlyException;
|
|
||||||
import dev.plex.command.exception.PlayerNotFoundException;
|
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
|
||||||
import dev.plex.event.AdminAddEvent;
|
|
||||||
import dev.plex.event.AdminRemoveEvent;
|
|
||||||
import dev.plex.event.AdminSetRankEvent;
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.ANY)
|
|
||||||
@CommandParameters(name = "admin", usage = "/<command> <add <player> | remove <player> | setrank <player> <rank> | list>", aliases = "saconfig,slconfig,adminconfig,adminmanage", description = "Manage all admins")
|
|
||||||
@System(value = "ranks")
|
|
||||||
public class AdminCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
//TODO: Better return messages
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length == 0)
|
|
||||||
{
|
|
||||||
return usage();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("add"))
|
|
||||||
{
|
|
||||||
if (args.length != 2)
|
|
||||||
{
|
|
||||||
return usage("/admin add <player>");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isConsole(sender))
|
|
||||||
{
|
|
||||||
throw new ConsoleOnlyException();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*UUID targetUUID = PlexUtils.getFromName(args[1]);
|
|
||||||
|
|
||||||
if (targetUUID != null)
|
|
||||||
{
|
|
||||||
PlexLog.debug("Admin Adding UUID: " + targetUUID);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (!DataUtils.hasPlayedBefore(args[1]))
|
|
||||||
{
|
|
||||||
throw new PlayerNotFoundException();
|
|
||||||
}
|
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(args[1]);
|
|
||||||
|
|
||||||
if (isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
return messageComponent("playerIsAdmin");
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new AdminAddEvent(sender, plexPlayer));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (args[0].equalsIgnoreCase("remove"))
|
|
||||||
{
|
|
||||||
if (args.length != 2)
|
|
||||||
{
|
|
||||||
return usage("/admin remove <player>");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isConsole(sender))
|
|
||||||
{
|
|
||||||
throw new ConsoleOnlyException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// UUID targetUUID = PlexUtils.getFromName(args[1]);
|
|
||||||
|
|
||||||
if (!DataUtils.hasPlayedBefore(args[1]))
|
|
||||||
{
|
|
||||||
throw new PlayerNotFoundException();
|
|
||||||
}
|
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(args[1]);
|
|
||||||
|
|
||||||
if (!isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
return messageComponent("playerNotAdmin");
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new AdminRemoveEvent(sender, plexPlayer));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("setrank"))
|
|
||||||
{
|
|
||||||
if (args.length != 3)
|
|
||||||
{
|
|
||||||
return usage("/admin setrank <player> <rank>");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isConsole(sender))
|
|
||||||
{
|
|
||||||
throw new ConsoleOnlyException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// UUID targetUUID = PlexUtils.getFromName(args[1]);
|
|
||||||
|
|
||||||
if (!DataUtils.hasPlayedBefore(args[1]))
|
|
||||||
{
|
|
||||||
throw new PlayerNotFoundException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rankExists(args[2]))
|
|
||||||
{
|
|
||||||
return messageComponent("rankNotFound");
|
|
||||||
}
|
|
||||||
|
|
||||||
Rank rank = Rank.valueOf(args[2].toUpperCase());
|
|
||||||
|
|
||||||
if (!rank.isAtLeast(Rank.ADMIN))
|
|
||||||
{
|
|
||||||
return messageComponent("rankMustBeHigherThanAdmin");
|
|
||||||
}
|
|
||||||
|
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(args[1]);
|
|
||||||
|
|
||||||
if (!isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
return messageComponent("playerNotAdmin");
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new AdminSetRankEvent(sender, plexPlayer, rank));
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("list"))
|
|
||||||
{
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return usage("/admin list");
|
|
||||||
}
|
|
||||||
|
|
||||||
return componentFromString("Admins: " + StringUtils.join(plugin.getAdminList().getAllAdmins(), ", "));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
|
||||||
{
|
|
||||||
if (args.length == 1)
|
|
||||||
{
|
|
||||||
return Arrays.asList("add", "remove", "setrank", "list");
|
|
||||||
}
|
|
||||||
else if (args.length == 2 && !args[0].equalsIgnoreCase("list"))
|
|
||||||
{
|
|
||||||
return PlexUtils.getPlayerNameList();
|
|
||||||
}
|
|
||||||
return ImmutableList.of();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private boolean rankExists(String rank)
|
|
||||||
{
|
|
||||||
for (Rank ranks : Rank.values())
|
|
||||||
{
|
|
||||||
if (ranks.name().equalsIgnoreCase(rank))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +1,17 @@
|
|||||||
package dev.plex.command.impl;
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
import dev.plex.cache.DataUtils;
|
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
|
import dev.plex.hook.VaultHook;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.minimessage.SafeMiniMessage;
|
import dev.plex.util.minimessage.SafeMiniMessage;
|
||||||
import dev.plex.util.redis.MessageUtil;
|
import dev.plex.util.redis.MessageUtil;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
@ -19,26 +21,45 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.adminchat", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.adminchat", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "adminchat", description = "Talk privately with other admins", usage = "/<command> <message>", aliases = "o,ac,sc,staffchat")
|
@CommandParameters(name = "adminchat", description = "Talk privately with other admins", usage = "/<command> <message>", aliases = "o,ac,sc,staffchat")
|
||||||
public class AdminChatCMD extends PlexCommand
|
public class AdminChatCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
{
|
{
|
||||||
|
PlexPlayer player;
|
||||||
if (args.length == 0)
|
if (args.length == 0)
|
||||||
{
|
{
|
||||||
if (playerSender != null) {
|
if (playerSender != null)
|
||||||
PlexPlayer player = DataUtils.getPlayer(playerSender.getUniqueId());
|
{
|
||||||
|
player = plugin.getPlayerCache().getPlexPlayer(playerSender.getUniqueId());
|
||||||
player.setStaffChat(!player.isStaffChat());
|
player.setStaffChat(!player.isStaffChat());
|
||||||
return messageComponent("adminChatToggled", BooleanUtils.toStringOnOff(player.isStaffChat()));
|
return messageComponent("adminChatToggled", BooleanUtils.toStringOnOff(player.isStaffChat()));
|
||||||
}
|
}
|
||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String prefix;
|
||||||
|
if (playerSender != null)
|
||||||
|
{
|
||||||
|
player = plugin.getPlayerCache().getPlexPlayer(playerSender.getUniqueId());
|
||||||
|
prefix = PlexUtils.mmSerialize(VaultHook.getPrefix(player));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prefix = "<dark_gray>[<dark_purple>Console<dark_gray>]";
|
||||||
|
}
|
||||||
|
PlexLog.debug("admin chat prefix: {0}", prefix);
|
||||||
String message = StringUtils.join(args, " ");
|
String message = StringUtils.join(args, " ");
|
||||||
plugin.getServer().getConsoleSender().sendMessage(messageComponent("adminChatFormat", sender.getName(), message));
|
plugin.getServer().getConsoleSender().sendMessage(messageComponent("adminChatFormat", sender.getName(), prefix, message));
|
||||||
MessageUtil.sendStaffChat(sender, SafeMiniMessage.mmDeserialize(message), PlexUtils.adminChat(sender.getName(), message).toArray(UUID[]::new));
|
MessageUtil.sendStaffChat(sender, SafeMiniMessage.mmDeserialize(message), PlexUtils.adminChat(sender.getName(), prefix, message).toArray(UUID[]::new));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,8 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -13,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.adminworld", source = RequiredCommandSource.IN_GAME)
|
@CommandPermissions(permission = "plex.adminworld", source = RequiredCommandSource.IN_GAME)
|
||||||
@CommandParameters(name = "adminworld", aliases = "aw", description = "Teleport to the adminworld")
|
@CommandParameters(name = "adminworld", aliases = "aw", description = "Teleport to the adminworld")
|
||||||
public class AdminworldCMD extends PlexCommand
|
public class AdminworldCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -30,4 +31,10 @@ public class AdminworldCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions;
|
|||||||
import dev.plex.command.exception.CommandFailException;
|
import dev.plex.command.exception.CommandFailException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.event.GameModeUpdateEvent;
|
import dev.plex.event.GameModeUpdateEvent;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -18,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.gamemode.adventure", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.gamemode.adventure", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "adventure", aliases = "gma,egma,eadventure,adventuremode,eadventuremode", description = "Set your own or another player's gamemode to adventure mode")
|
@CommandParameters(name = "adventure", aliases = "gma,egma,eadventure,adventuremode,eadventuremode", description = "Set your own or another player's gamemode to adventure mode")
|
||||||
public class AdventureCMD extends PlexCommand
|
public class AdventureCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -29,14 +28,13 @@ public class AdventureCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
if (isConsole(sender))
|
if (isConsole(sender))
|
||||||
{
|
{
|
||||||
throw new CommandFailException(PlexUtils.messageString("consoleMustDefinePlayer"));
|
throw new CommandFailException(messageString("consoleMustDefinePlayer"));
|
||||||
}
|
}
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, playerSender, GameMode.ADVENTURE));
|
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, playerSender, GameMode.ADVENTURE));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkRank(sender, Rank.ADMIN, "plex.gamemode.adventure.others"))
|
checkPermission(sender, "plex.gamemode.adventure.others");
|
||||||
{
|
|
||||||
if (args[0].equals("-a"))
|
if (args[0].equals("-a"))
|
||||||
{
|
{
|
||||||
for (Player targetPlayer : Bukkit.getServer().getOnlinePlayers())
|
for (Player targetPlayer : Bukkit.getServer().getOnlinePlayers())
|
||||||
@ -50,14 +48,13 @@ public class AdventureCMD extends PlexCommand
|
|||||||
|
|
||||||
Player nPlayer = getNonNullPlayer(args[0]);
|
Player nPlayer = getNonNullPlayer(args[0]);
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, nPlayer, GameMode.ADVENTURE));
|
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, nPlayer, GameMode.ADVENTURE));
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (checkTab(sender, Rank.ADMIN, "plex.gamemode.adventure.others"))
|
if (silentCheckPermission(sender, "plex.gamemode.adventure.others"))
|
||||||
{
|
{
|
||||||
return PlexUtils.getPlayerNameList();
|
return PlexUtils.getPlayerNameList();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package dev.plex.command.impl;
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import dev.plex.Plex;
|
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
@ -11,16 +9,14 @@ import dev.plex.command.source.RequiredCommandSource;
|
|||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.Punishment;
|
import dev.plex.punishment.Punishment;
|
||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.BungeeUtil;
|
import dev.plex.util.BungeeUtil;
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
import dev.plex.util.WebUtils;
|
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -29,8 +25,8 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "ban", usage = "/<command> <player> [reason]", aliases = "offlineban,gtfo", description = "Bans a player, offline or online")
|
@CommandParameters(name = "ban", usage = "/<command> <player> [reason] [-rb]", aliases = "offlineban,gtfo", description = "Bans a player, offline or online")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.ban", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.ban", source = RequiredCommandSource.ANY)
|
||||||
|
|
||||||
public class BanCMD extends PlexCommand
|
public class BanCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -42,32 +38,16 @@ public class BanCMD extends PlexCommand
|
|||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID targetUUID = WebUtils.getFromName(args[0]);
|
final PlexPlayer plexPlayer = DataUtils.getPlayer(args[0]);
|
||||||
|
|
||||||
if (targetUUID == null || !DataUtils.hasPlayedBefore(targetUUID))
|
if (plexPlayer == null)
|
||||||
{
|
{
|
||||||
throw new PlayerNotFoundException();
|
throw new PlayerNotFoundException();
|
||||||
}
|
}
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(targetUUID);
|
|
||||||
Player player = Bukkit.getPlayer(targetUUID);
|
|
||||||
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
Player player = Bukkit.getPlayer(plexPlayer.getUuid());
|
||||||
{
|
|
||||||
if (isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
if (!isConsole(sender))
|
|
||||||
{
|
|
||||||
assert playerSender != null;
|
|
||||||
PlexPlayer plexPlayer1 = getPlexPlayer(playerSender);
|
|
||||||
if (!plexPlayer1.getRankFromString().isAtLeast(plexPlayer.getRankFromString()))
|
|
||||||
{
|
|
||||||
return messageComponent("higherRankThanYou");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.getPunishmentManager().isAsyncBanned(targetUUID).whenComplete((aBoolean, throwable) ->
|
plugin.getPunishmentManager().isAsyncBanned(plexPlayer.getUuid()).whenComplete((aBoolean, throwable) ->
|
||||||
{
|
{
|
||||||
if (aBoolean)
|
if (aBoolean)
|
||||||
{
|
{
|
||||||
@ -75,29 +55,29 @@ public class BanCMD extends PlexCommand
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String reason;
|
String reason;
|
||||||
Punishment punishment = new Punishment(targetUUID, getUUID(sender));
|
Punishment punishment = new Punishment(plexPlayer.getUuid(), getUUID(sender));
|
||||||
punishment.setType(PunishmentType.BAN);
|
punishment.setType(PunishmentType.BAN);
|
||||||
|
boolean rollBack = false;
|
||||||
if (args.length > 1)
|
if (args.length > 1)
|
||||||
{
|
{
|
||||||
reason = StringUtils.join(args, " ", 1, args.length);
|
reason = StringUtils.join(args, " ", 1, args.length);
|
||||||
punishment.setReason(reason);
|
String newReason = StringUtils.normalizeSpace(reason.replace("-rb", ""));
|
||||||
|
punishment.setReason(newReason.trim().isEmpty() ? messageString("noReasonProvided") : newReason);
|
||||||
|
rollBack = reason.startsWith("-rb") || reason.endsWith("-rb");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
punishment.setReason("No reason provided.");
|
punishment.setReason(messageString("noReasonProvided"));
|
||||||
}
|
}
|
||||||
punishment.setPunishedUsername(plexPlayer.getName());
|
punishment.setPunishedUsername(plexPlayer.getName());
|
||||||
ZonedDateTime date = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
ZonedDateTime date = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
||||||
punishment.setEndDate(date.plusDays(1));
|
punishment.setEndDate(date.plusDays(1));
|
||||||
punishment.setCustomTime(false);
|
punishment.setCustomTime(false);
|
||||||
punishment.setActive(!isAdmin(plexPlayer));
|
punishment.setActive(true);
|
||||||
if (player != null)
|
punishment.setIp(player != null ? player.getAddress().getAddress().getHostAddress().trim() : plexPlayer.getIps().get(plexPlayer.getIps().size() - 1));
|
||||||
{
|
|
||||||
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
|
||||||
}
|
|
||||||
plugin.getPunishmentManager().punish(plexPlayer, punishment);
|
plugin.getPunishmentManager().punish(plexPlayer, punishment);
|
||||||
PlexUtils.broadcast(messageComponent("banningPlayer", sender.getName(), plexPlayer.getName()));
|
PlexUtils.broadcast(messageComponent("banningPlayer", sender.getName(), plexPlayer.getName()));
|
||||||
Bukkit.getScheduler().runTask(Plex.get(), () ->
|
Bukkit.getGlobalRegionScheduler().execute(plugin, () ->
|
||||||
{
|
{
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
@ -105,14 +85,59 @@ public class BanCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
PlexLog.debug("(From /ban command) PunishedPlayer UUID: " + plexPlayer.getUuid());
|
PlexLog.debug("(From /ban command) PunishedPlayer UUID: " + plexPlayer.getUuid());
|
||||||
|
|
||||||
|
if (rollBack)
|
||||||
|
{
|
||||||
|
/*if (plugin.getPrismHook() != null && plugin.getPrismHook().hasPrism())
|
||||||
|
{
|
||||||
|
PrismParameters parameters = plugin.getPrismHook().prismApi().createParameters();
|
||||||
|
parameters.addActionType("block-place");
|
||||||
|
parameters.addActionType("block-break");
|
||||||
|
parameters.addActionType("block-burn");
|
||||||
|
parameters.addActionType("entity-spawn");
|
||||||
|
parameters.addActionType("entity-kill");
|
||||||
|
parameters.addActionType("entity-explode");
|
||||||
|
parameters.addPlayerName(plexPlayer.getName());
|
||||||
|
parameters.setBeforeTime(Instant.now().toEpochMilli());
|
||||||
|
parameters.setProcessType(PrismProcessType.ROLLBACK);
|
||||||
|
final Future<Result> result = plugin.getPrismHook().prismApi().performLookup(parameters, sender);
|
||||||
|
Bukkit.getAsyncScheduler().runNow(plugin, scheduledTask ->
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
final Result done = result.get();
|
||||||
|
}
|
||||||
|
catch (InterruptedException | ExecutionException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else */
|
||||||
|
if (plugin.getCoreProtectHook() != null && plugin.getCoreProtectHook().hasCoreProtect())
|
||||||
|
{
|
||||||
|
Bukkit.getAsyncScheduler().runNow(plugin, scheduledTask ->
|
||||||
|
{
|
||||||
|
plugin.getCoreProtectHook().coreProtectAPI().performRollback(86400, Collections.singletonList(plexPlayer.getName()), null, null, null, null, 0, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.ban") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
if (args.length == 1 && silentCheckPermission(sender, this.getPermission()))
|
||||||
|
{
|
||||||
|
return PlexUtils.getPlayerNameList();
|
||||||
|
}
|
||||||
|
if (args.length > 1 && silentCheckPermission(sender, this.getPermission()))
|
||||||
|
{
|
||||||
|
return Collections.singletonList("-rb");
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
59
server/src/main/java/dev/plex/command/impl/BanListCommand.java
Executable file
59
server/src/main/java/dev/plex/command/impl/BanListCommand.java
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.command.PlexCommand;
|
||||||
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import dev.plex.punishment.Punishment;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@CommandParameters(name = "banlist", description = "Manages the banlist", usage = "/<command> [purge]")
|
||||||
|
@CommandPermissions(permission = "plex.banlist")
|
||||||
|
public class BanListCommand extends PlexCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player player, @NotNull String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
plugin.getPunishmentManager().getActiveBans().whenComplete((punishments, throwable) ->
|
||||||
|
{
|
||||||
|
send(sender, mmString("<gold>Active Bans (" + punishments.size() + "): <yellow>" + StringUtils.join(punishments.stream().map(Punishment::getPunishedUsername).collect(Collectors.toList()), ", ")));
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (args[0].equalsIgnoreCase("purge") || args[0].equalsIgnoreCase("clear"))
|
||||||
|
{
|
||||||
|
if (sender instanceof Player)
|
||||||
|
{
|
||||||
|
return messageComponent("noPermissionInGame");
|
||||||
|
}
|
||||||
|
if (!sender.getName().equalsIgnoreCase("console"))
|
||||||
|
{
|
||||||
|
if (!checkPermission(sender, "plex.banlist.clear"))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plugin.getPunishmentManager().getActiveBans().whenComplete((punishments, throwable) ->
|
||||||
|
{
|
||||||
|
punishments.forEach(plugin.getPunishmentManager()::unban);
|
||||||
|
send(sender, mmString("<gold>Unbanned " + punishments.size() + " players."));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return args.length == 1 && silentCheckPermission(sender, "plex.banlist.clear") ? List.of("purge", "clear") : ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.cache.DataUtils;
|
||||||
|
import dev.plex.command.PlexCommand;
|
||||||
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import dev.plex.command.exception.PlayerNotFoundException;
|
||||||
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
|
import dev.plex.meta.PlayerMeta;
|
||||||
|
import dev.plex.player.PlexPlayer;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.List;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "plex.broadcastloginmessage", source = RequiredCommandSource.ANY)
|
||||||
|
@CommandParameters(name = "bcastloginmessage", usage = "/<command> <player>", description = "Broadcast your login message (for vanish support)", aliases = "bcastlm")
|
||||||
|
public class BcastLoginMessageCMD extends PlexCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
PlexPlayer plexPlayer = DataUtils.getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (plexPlayer == null)
|
||||||
|
{
|
||||||
|
throw new PlayerNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
String loginMessage = PlayerMeta.getLoginMessage(plexPlayer);
|
||||||
|
if (!loginMessage.isEmpty())
|
||||||
|
{
|
||||||
|
PlexUtils.broadcast(PlexUtils.stringToComponent(loginMessage));
|
||||||
|
PlexUtils.broadcast(messageComponent("loginMessage", plexPlayer.getName()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return mmString("<red>This player does not have a login message.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
@ -4,8 +4,11 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.listener.impl.BlockListener;
|
import dev.plex.listener.impl.BlockListener;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -13,7 +16,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.blockedit")
|
@CommandPermissions(permission = "plex.blockedit")
|
||||||
@CommandParameters(name = "blockedit", usage = "/<command> [list | purge | all | <player>]", aliases = "bedit", description = "Prevent players from modifying blocks")
|
@CommandParameters(name = "blockedit", usage = "/<command> [list | purge | all | <player>]", aliases = "bedit", description = "Prevent players from modifying blocks")
|
||||||
public class BlockEditCMD extends PlexCommand
|
public class BlockEditCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -63,7 +66,7 @@ public class BlockEditCMD extends PlexCommand
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
for (final Player player : Bukkit.getOnlinePlayers())
|
for (final Player player : Bukkit.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (!silentCheckRank(player, Rank.ADMIN, "plex.blockedit"))
|
if (!silentCheckPermission(player, "plex.blockedit"))
|
||||||
{
|
{
|
||||||
bl.blockedPlayers.add(player.getName());
|
bl.blockedPlayers.add(player.getName());
|
||||||
++count;
|
++count;
|
||||||
@ -76,7 +79,7 @@ public class BlockEditCMD extends PlexCommand
|
|||||||
final Player player = getNonNullPlayer(args[0]);
|
final Player player = getNonNullPlayer(args[0]);
|
||||||
if (!bl.blockedPlayers.contains(player.getName()))
|
if (!bl.blockedPlayers.contains(player.getName()))
|
||||||
{
|
{
|
||||||
if (silentCheckRank(player, Rank.ADMIN, "plex.blockedit"))
|
if (silentCheckPermission(player, "plex.blockedit"))
|
||||||
{
|
{
|
||||||
send(sender, messageComponent("higherRankThanYou"));
|
send(sender, messageComponent("higherRankThanYou"));
|
||||||
return null;
|
return null;
|
||||||
@ -95,4 +98,20 @@ public class BlockEditCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, this.getPermission()))
|
||||||
|
{
|
||||||
|
List<String> options = new ArrayList<>();
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
options.addAll(Arrays.asList("list", "purge", "all"));
|
||||||
|
options.addAll(PlexUtils.getPlayerNameList());
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,14 +6,15 @@ import dev.plex.command.annotation.CommandParameters;
|
|||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.commandspy", source = RequiredCommandSource.IN_GAME)
|
@CommandPermissions(permission = "plex.commandspy", source = RequiredCommandSource.IN_GAME)
|
||||||
@CommandParameters(name = "commandspy", aliases = "cmdspy", description = "Spy on other player's commands")
|
@CommandParameters(name = "commandspy", aliases = "cmdspy", description = "Spy on other player's commands")
|
||||||
public class CommandSpyCMD extends PlexCommand
|
public class CommandSpyCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -22,7 +23,7 @@ public class CommandSpyCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
if (playerSender != null)
|
if (playerSender != null)
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(playerSender.getUniqueId());
|
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayer(playerSender.getUniqueId());
|
||||||
plexPlayer.setCommandSpy(!plexPlayer.isCommandSpy());
|
plexPlayer.setCommandSpy(!plexPlayer.isCommandSpy());
|
||||||
DataUtils.update(plexPlayer);
|
DataUtils.update(plexPlayer);
|
||||||
send(sender, messageComponent("toggleCommandSpy")
|
send(sender, messageComponent("toggleCommandSpy")
|
||||||
@ -31,4 +32,10 @@ public class CommandSpyCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,9 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -13,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.consolesay", source = RequiredCommandSource.CONSOLE)
|
@CommandPermissions(permission = "plex.consolesay", source = RequiredCommandSource.CONSOLE)
|
||||||
@CommandParameters(name = "consolesay", usage = "/<command> <message>", description = "Displays a message to everyone", aliases = "csay")
|
@CommandParameters(name = "consolesay", usage = "/<command> <message>", description = "Displays a message to everyone", aliases = "csay")
|
||||||
public class ConsoleSayCMD extends PlexCommand
|
public class ConsoleSayCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -28,4 +29,10 @@ public class ConsoleSayCMD extends PlexCommand
|
|||||||
PlexUtils.broadcast(PlexUtils.messageComponent("consoleSayMessage", sender.getName(), PlexUtils.mmStripColor(StringUtils.join(args, " "))));
|
PlexUtils.broadcast(PlexUtils.messageComponent("consoleSayMessage", sender.getName(), PlexUtils.mmStripColor(StringUtils.join(args, " "))));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions;
|
|||||||
import dev.plex.command.exception.CommandFailException;
|
import dev.plex.command.exception.CommandFailException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.event.GameModeUpdateEvent;
|
import dev.plex.event.GameModeUpdateEvent;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -18,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.gamemode.creative", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.gamemode.creative", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "creative", aliases = "gmc,egmc,ecreative,eecreative,creativemode,ecreativemode", description = "Set your own or another player's gamemode to creative mode")
|
@CommandParameters(name = "creative", aliases = "gmc,egmc,ecreative,eecreative,creativemode,ecreativemode", description = "Set your own or another player's gamemode to creative mode")
|
||||||
public class CreativeCMD extends PlexCommand
|
public class CreativeCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -29,7 +28,7 @@ public class CreativeCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
if (isConsole(sender))
|
if (isConsole(sender))
|
||||||
{
|
{
|
||||||
throw new CommandFailException(PlexUtils.messageString("consoleMustDefinePlayer"));
|
throw new CommandFailException(messageString("consoleMustDefinePlayer"));
|
||||||
}
|
}
|
||||||
if (!(playerSender == null))
|
if (!(playerSender == null))
|
||||||
{
|
{
|
||||||
@ -38,8 +37,7 @@ public class CreativeCMD extends PlexCommand
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkRank(sender, Rank.ADMIN, "plex.gamemode.creative.others"))
|
checkPermission(sender, "plex.gamemode.creative.others");
|
||||||
{
|
|
||||||
if (args[0].equals("-a"))
|
if (args[0].equals("-a"))
|
||||||
{
|
{
|
||||||
for (Player targetPlayer : Bukkit.getServer().getOnlinePlayers())
|
for (Player targetPlayer : Bukkit.getServer().getOnlinePlayers())
|
||||||
@ -55,13 +53,11 @@ public class CreativeCMD extends PlexCommand
|
|||||||
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, nPlayer, GameMode.CREATIVE));
|
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, nPlayer, GameMode.CREATIVE));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (checkTab(sender, Rank.ADMIN, "plex.gamemode.creative.others"))
|
if (silentCheckPermission(sender, "plex.gamemode.creative.others"))
|
||||||
{
|
{
|
||||||
return PlexUtils.getPlayerNameList();
|
return PlexUtils.getPlayerNameList();
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,7 @@ import com.google.common.collect.ImmutableList;
|
|||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.annotation.System;
|
import dev.plex.menu.impl.MaterialMenu;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.GameRuleUtil;
|
import dev.plex.util.GameRuleUtil;
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
@ -13,7 +12,6 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -23,8 +21,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "pdebug", description = "Plex's debug command", usage = "/<command> <aliases <command> | redis-reset <player> | gamerules>")
|
@CommandParameters(name = "pdebug", description = "Plex's debug command", usage = "/<command> <aliases <command> | redis-reset <player> | gamerules>")
|
||||||
@CommandPermissions(level = Rank.EXECUTIVE, permission = "plex.debug")
|
@CommandPermissions(permission = "plex.debug")
|
||||||
@System(debug = true)
|
|
||||||
public class DebugCMD extends PlexCommand
|
public class DebugCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -35,14 +32,17 @@ public class DebugCMD extends PlexCommand
|
|||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
if (args[0].equalsIgnoreCase("redis-reset"))
|
if (args[0].equalsIgnoreCase("redis-reset"))
|
||||||
|
{
|
||||||
|
if (args.length == 2)
|
||||||
{
|
{
|
||||||
Player player = getNonNullPlayer(args[1]);
|
Player player = getNonNullPlayer(args[1]);
|
||||||
if (plugin.getRedisConnection().getJedis().exists(player.getUniqueId().toString()))
|
if (plugin.getRedisConnection().getJedis().exists(player.getUniqueId().toString()))
|
||||||
{
|
{
|
||||||
plugin.getRedisConnection().getJedis().del(player.getUniqueId().toString());
|
plugin.getRedisConnection().getJedis().del(player.getUniqueId().toString());
|
||||||
return componentFromString("Successfully reset " + player.getName() + "'s Redis punishments!").color(NamedTextColor.YELLOW);
|
return messageComponent("redisResetSuccessful", player.getName());
|
||||||
|
}
|
||||||
|
return messageComponent("redisResetPlayerNotFound");
|
||||||
}
|
}
|
||||||
return componentFromString("Couldn't find player in Redis punishments.");
|
|
||||||
}
|
}
|
||||||
if (args[0].equalsIgnoreCase("gamerules"))
|
if (args[0].equalsIgnoreCase("gamerules"))
|
||||||
{
|
{
|
||||||
@ -60,24 +60,36 @@ public class DebugCMD extends PlexCommand
|
|||||||
PlexLog.log("Set specific gamerules for world: " + world.toLowerCase(Locale.ROOT));
|
PlexLog.log("Set specific gamerules for world: " + world.toLowerCase(Locale.ROOT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mmString("<aqua>Re-applied game all the game rules!");
|
return messageComponent("reappliedGamerules");
|
||||||
}
|
}
|
||||||
if (args[0].equalsIgnoreCase("aliases"))
|
if (args[0].equalsIgnoreCase("aliases"))
|
||||||
|
{
|
||||||
|
if (args.length == 2)
|
||||||
{
|
{
|
||||||
String commandName = args[1];
|
String commandName = args[1];
|
||||||
Command command = plugin.getServer().getCommandMap().getCommand(commandName);
|
Command command = plugin.getServer().getCommandMap().getCommand(commandName);
|
||||||
if (command == null)
|
if (command == null)
|
||||||
{
|
{
|
||||||
return mmString("<red>That command could not be found!");
|
return messageComponent("commandNotFound");
|
||||||
}
|
}
|
||||||
return mmString("<aqua>Aliases for " + commandName + " are: " + Arrays.toString(command.getAliases().toArray(new String[0])));
|
return messageComponent("commandAliases", commandName, Arrays.toString(command.getAliases().toArray(new String[0])));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (args[0].equalsIgnoreCase("pagination"))
|
||||||
|
{
|
||||||
|
if (playerSender == null)
|
||||||
|
{
|
||||||
|
return messageComponent("noPermissionConsole");
|
||||||
|
}
|
||||||
|
new MaterialMenu().open(playerSender);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,31 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.command.annotation.System;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandParameters(name = "deopall", description = "Deop everyone on the server", aliases = "deopa")
|
|
||||||
@CommandPermissions(level = Rank.ADMIN)
|
|
||||||
@System(value = "ranks")
|
|
||||||
public class DeopAllCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
|
||||||
{
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
player.setOp(false);
|
|
||||||
}
|
|
||||||
PlexUtils.broadcast(messageComponent("deoppedAllPlayers", sender.getName()));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.command.annotation.System;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandParameters(name = "deop", description = "Deop a player on the server", usage = "/<command> <player>")
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.deop")
|
|
||||||
@System(value = "ranks")
|
|
||||||
public class DeopCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return usage();
|
|
||||||
}
|
|
||||||
Player player = getNonNullPlayer(args[0]);
|
|
||||||
player.setOp(false);
|
|
||||||
PlexUtils.broadcast(messageComponent("deoppedPlayer", sender.getName(), player.getName()));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
|
||||||
{
|
|
||||||
return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,10 +4,11 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -21,8 +22,8 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.entitywipe", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.entitywipe", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "entitywipe", description = "Remove various server entities that may cause lag, such as dropped items, minecarts, and boats.", usage = "/<command> [name]", aliases = "ew,rd")
|
@CommandParameters(name = "entitywipe", description = "Remove various server entities that may cause lag, such as dropped items, minecarts, and boats.", usage = "/<command> [entity] [radius]", aliases = "ew,rd")
|
||||||
public class EntityWipeCMD extends PlexCommand
|
public class EntityWipeCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -32,6 +33,22 @@ public class EntityWipeCMD extends PlexCommand
|
|||||||
|
|
||||||
List<String> entityWhitelist = new LinkedList<>(Arrays.asList(args));
|
List<String> entityWhitelist = new LinkedList<>(Arrays.asList(args));
|
||||||
|
|
||||||
|
boolean radiusSpecified = !entityWhitelist.isEmpty() && isNumeric(entityWhitelist.get(entityWhitelist.size() - 1)); // try and detect if the last argument of the command is a number
|
||||||
|
boolean useBlacklist = args.length == 0 || (args.length == 1 && radiusSpecified); // if there are no arguments or the one argument is a number
|
||||||
|
int radius = 0;
|
||||||
|
|
||||||
|
PlexLog.debug("using blacklist: " + useBlacklist);
|
||||||
|
PlexLog.debug("radius specified: " + radiusSpecified);
|
||||||
|
|
||||||
|
if (radiusSpecified)
|
||||||
|
{
|
||||||
|
radius = parseInt(sender, args[entityWhitelist.size() - 1]); // get the args length as the size of the list
|
||||||
|
radius *= radius;
|
||||||
|
entityWhitelist.remove(entityWhitelist.size() - 1); // remove the radius from the list
|
||||||
|
}
|
||||||
|
|
||||||
|
PlexLog.debug("radius: " + radius);
|
||||||
|
|
||||||
EntityType[] entityTypes = EntityType.values();
|
EntityType[] entityTypes = EntityType.values();
|
||||||
entityWhitelist.removeIf(name ->
|
entityWhitelist.removeIf(name ->
|
||||||
{
|
{
|
||||||
@ -43,8 +60,6 @@ public class EntityWipeCMD extends PlexCommand
|
|||||||
return res;
|
return res;
|
||||||
});
|
});
|
||||||
|
|
||||||
boolean useBlacklist = args.length == 0;
|
|
||||||
|
|
||||||
HashMap<String, Integer> entityCounts = new HashMap<>();
|
HashMap<String, Integer> entityCounts = new HashMap<>();
|
||||||
|
|
||||||
for (World world : Bukkit.getWorlds())
|
for (World world : Bukkit.getWorlds())
|
||||||
@ -57,6 +72,16 @@ public class EntityWipeCMD extends PlexCommand
|
|||||||
|
|
||||||
if (useBlacklist ? entityBlacklist.stream().noneMatch(entityName -> entityName.equalsIgnoreCase(type)) : entityWhitelist.stream().anyMatch(entityName -> entityName.equalsIgnoreCase(type)))
|
if (useBlacklist ? entityBlacklist.stream().noneMatch(entityName -> entityName.equalsIgnoreCase(type)) : entityWhitelist.stream().anyMatch(entityName -> entityName.equalsIgnoreCase(type)))
|
||||||
{
|
{
|
||||||
|
if (radius > 0)
|
||||||
|
{
|
||||||
|
PlexLog.debug("we got here, radius is > 0");
|
||||||
|
if (playerSender != null && entity.getWorld() == playerSender.getWorld() && playerSender.getLocation().distanceSquared(entity.getLocation()) > radius)
|
||||||
|
{
|
||||||
|
PlexLog.debug("continuing");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlexLog.debug("removed entity: " + entity.getType().name());
|
||||||
entity.remove();
|
entity.remove();
|
||||||
|
|
||||||
entityCounts.put(type, entityCounts.getOrDefault(type, 0) + 1);
|
entityCounts.put(type, entityCounts.getOrDefault(type, 0) + 1);
|
||||||
@ -85,7 +110,9 @@ public class EntityWipeCMD extends PlexCommand
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, this.getPermission()))
|
||||||
{
|
{
|
||||||
List<String> entities = new ArrayList<>();
|
List<String> entities = new ArrayList<>();
|
||||||
for (World world : Bukkit.getWorlds())
|
for (World world : Bukkit.getWorlds())
|
||||||
@ -100,4 +127,36 @@ public class EntityWipeCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return entities.stream().toList();
|
return entities.stream().toList();
|
||||||
}
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer parseInt(CommandSender sender, String string)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return Integer.parseInt(string);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException ex)
|
||||||
|
{
|
||||||
|
sender.sendMessage(messageComponent("notANumber", string));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isNumeric(String string)
|
||||||
|
{
|
||||||
|
if (string == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int num = Integer.parseInt(string);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException nfe)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
@ -4,7 +4,8 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -13,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.flatlands", source = RequiredCommandSource.IN_GAME)
|
@CommandPermissions(permission = "plex.flatlands", source = RequiredCommandSource.IN_GAME)
|
||||||
@CommandParameters(name = "flatlands", description = "Teleport to the flatlands")
|
@CommandParameters(name = "flatlands", description = "Teleport to the flatlands")
|
||||||
public class FlatlandsCMD extends PlexCommand
|
public class FlatlandsCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -29,4 +30,10 @@ public class FlatlandsCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions;
|
|||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.Punishment;
|
import dev.plex.punishment.Punishment;
|
||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
@ -20,7 +19,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "freeze", description = "Freeze a player on the server", usage = "/<command> <player>", aliases = "fr")
|
@CommandParameters(name = "freeze", description = "Freeze a player on the server", usage = "/<command> <player>", aliases = "fr")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.freeze")
|
@CommandPermissions(permission = "plex.freeze")
|
||||||
public class FreezeCMD extends PlexCommand
|
public class FreezeCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -38,27 +37,15 @@ public class FreezeCMD extends PlexCommand
|
|||||||
return messageComponent("playerFrozen");
|
return messageComponent("playerFrozen");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isAdmin(getPlexPlayer(player)))
|
|
||||||
{
|
|
||||||
if (!isConsole(sender))
|
|
||||||
{
|
|
||||||
assert playerSender != null;
|
|
||||||
PlexPlayer plexPlayer1 = getPlexPlayer(playerSender);
|
|
||||||
if (!plexPlayer1.getRankFromString().isAtLeast(getPlexPlayer(player).getRankFromString()) && getPlexPlayer(player).isAdminActive())
|
|
||||||
{
|
|
||||||
return messageComponent("higherRankThanYou");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Punishment punishment = new Punishment(punishedPlayer.getUuid(), getUUID(sender));
|
Punishment punishment = new Punishment(punishedPlayer.getUuid(), getUUID(sender));
|
||||||
punishment.setCustomTime(false);
|
punishment.setCustomTime(false);
|
||||||
ZonedDateTime date = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
ZonedDateTime date = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
||||||
punishment.setEndDate(date.plusMinutes(5));
|
punishment.setEndDate(date.plusSeconds(plugin.config.getInt("punishments.freeze-timer", 300)));
|
||||||
punishment.setType(PunishmentType.FREEZE);
|
punishment.setType(PunishmentType.FREEZE);
|
||||||
punishment.setPunishedUsername(player.getName());
|
punishment.setPunishedUsername(player.getName());
|
||||||
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
||||||
punishment.setReason("");
|
punishment.setReason("");
|
||||||
|
punishment.setActive(true);
|
||||||
|
|
||||||
plugin.getPunishmentManager().punish(punishedPlayer, punishment);
|
plugin.getPunishmentManager().punish(punishedPlayer, punishment);
|
||||||
PlexUtils.broadcast(messageComponent("frozePlayer", sender.getName(), player.getName()));
|
PlexUtils.broadcast(messageComponent("frozePlayer", sender.getName(), player.getName()));
|
||||||
@ -66,8 +53,8 @@ public class FreezeCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.freeze") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,7 +6,6 @@ import dev.plex.command.annotation.CommandPermissions;
|
|||||||
import dev.plex.command.exception.CommandFailException;
|
import dev.plex.command.exception.CommandFailException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.event.GameModeUpdateEvent;
|
import dev.plex.event.GameModeUpdateEvent;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -20,7 +19,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "gamemode", usage = "/<command> <creative | survival | adventure | default | spectator> [player]", description = "Change your gamemode", aliases = "gm,egamemode,gmt,egmt")
|
@CommandParameters(name = "gamemode", usage = "/<command> <creative | survival | adventure | default | spectator> [player]", description = "Change your gamemode", aliases = "gm,egamemode,gmt,egmt")
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.gamemode", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.gamemode", source = RequiredCommandSource.ANY)
|
||||||
public class GamemodeCMD extends PlexCommand
|
public class GamemodeCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
private GameMode gamemode;
|
private GameMode gamemode;
|
||||||
@ -61,14 +60,14 @@ public class GamemodeCMD extends PlexCommand
|
|||||||
case "spectator", "sp", "3", "6" ->
|
case "spectator", "sp", "3", "6" ->
|
||||||
{
|
{
|
||||||
gamemode = GameMode.SPECTATOR;
|
gamemode = GameMode.SPECTATOR;
|
||||||
checkRank(sender, Rank.ADMIN, "plex.gamemode.spectator");
|
checkPermission(sender, "plex.gamemode.spectator");
|
||||||
update(sender, playerSender, GameMode.SPECTATOR);
|
update(sender, playerSender, GameMode.SPECTATOR);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length > 1)
|
if (args.length > 1)
|
||||||
{
|
{
|
||||||
checkRank(sender, Rank.ADMIN, "plex.gamemode.others");
|
checkPermission(sender, "plex.gamemode.others");
|
||||||
Player player = getNonNullPlayer(args[1]);
|
Player player = getNonNullPlayer(args[1]);
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, player, gamemode));
|
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, player, gamemode));
|
||||||
}
|
}
|
||||||
@ -88,16 +87,19 @@ public class GamemodeCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (args.length == 1)
|
if (args.length == 1)
|
||||||
{
|
{
|
||||||
return Arrays.asList("creative", "survival", "adventure", "spectator", "default");
|
return Arrays.asList("creative", "survival", "adventure", "spectator", "default");
|
||||||
}
|
}
|
||||||
if (args.length == 2)
|
if (args.length == 2)
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, "plex.gamemode.others"))
|
||||||
{
|
{
|
||||||
return PlexUtils.getPlayerNameList();
|
return PlexUtils.getPlayerNameList();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package dev.plex.command.impl;
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
@ -9,14 +10,12 @@ import dev.plex.command.source.RequiredCommandSource;
|
|||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.Punishment;
|
import dev.plex.punishment.Punishment;
|
||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.BungeeUtil;
|
import dev.plex.util.BungeeUtil;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
import dev.plex.util.WebUtils;
|
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.util.UUID;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -26,7 +25,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "kick", description = "Kicks a player", usage = "/<command> <player>")
|
@CommandParameters(name = "kick", description = "Kicks a player", usage = "/<command> <player>")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.kick", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.kick", source = RequiredCommandSource.ANY)
|
||||||
public class KickCMD extends PlexCommand
|
public class KickCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -37,28 +36,27 @@ public class KickCMD extends PlexCommand
|
|||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID targetUUID = WebUtils.getFromName(args[0]);
|
PlexPlayer plexPlayer = DataUtils.getPlayer(args[0]);
|
||||||
String reason = "No reason provided";
|
String reason = messageString("noReasonProvided");
|
||||||
|
|
||||||
if (targetUUID == null || !DataUtils.hasPlayedBefore(targetUUID))
|
if (plexPlayer == null)
|
||||||
{
|
{
|
||||||
throw new PlayerNotFoundException();
|
throw new PlayerNotFoundException();
|
||||||
}
|
}
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(targetUUID);
|
Player player = Bukkit.getPlayer(plexPlayer.getUuid());
|
||||||
Player player = Bukkit.getPlayer(targetUUID);
|
|
||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
throw new PlayerNotFoundException();
|
throw new PlayerNotFoundException();
|
||||||
}
|
}
|
||||||
Punishment punishment = new Punishment(targetUUID, getUUID(sender));
|
Punishment punishment = new Punishment(plexPlayer.getUuid(), getUUID(sender));
|
||||||
punishment.setType(PunishmentType.KICK);
|
punishment.setType(PunishmentType.KICK);
|
||||||
if (args.length > 1)
|
if (args.length > 1)
|
||||||
{
|
{
|
||||||
reason = StringUtils.join(args, " ", 1, args.length);
|
reason = StringUtils.join(args, " ", 1, args.length);
|
||||||
punishment.setReason(reason);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
punishment.setReason(reason);
|
||||||
punishment.setPunishedUsername(plexPlayer.getName());
|
punishment.setPunishedUsername(plexPlayer.getName());
|
||||||
punishment.setEndDate(ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE)));
|
punishment.setEndDate(ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE)));
|
||||||
punishment.setCustomTime(false);
|
punishment.setCustomTime(false);
|
||||||
@ -66,7 +64,13 @@ public class KickCMD extends PlexCommand
|
|||||||
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
||||||
plugin.getPunishmentManager().punish(plexPlayer, punishment);
|
plugin.getPunishmentManager().punish(plexPlayer, punishment);
|
||||||
PlexUtils.broadcast(messageComponent("kickedPlayer", sender.getName(), plexPlayer.getName()));
|
PlexUtils.broadcast(messageComponent("kickedPlayer", sender.getName(), plexPlayer.getName()));
|
||||||
BungeeUtil.kickPlayer(player, Punishment.generateBanMessage(punishment));
|
BungeeUtil.kickPlayer(player, Punishment.generateKickMessage(punishment));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
|
}
|
||||||
}
|
}
|
@ -4,8 +4,10 @@ import com.google.common.collect.Lists;
|
|||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.annotation.System;
|
import dev.plex.hook.VaultHook;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.meta.PlayerMeta;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
@ -15,36 +17,46 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "list", description = "Show a list of all online players", aliases = "lsit")
|
@CommandParameters(name = "list", description = "Show a list of all online players", usage = "/<command> [-d | -v]", aliases = "lsit,who,playerlist,online")
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.list")
|
@CommandPermissions(permission = "plex.list")
|
||||||
@System(value = "ranks")
|
|
||||||
public class ListCMD extends PlexCommand
|
public class ListCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
{
|
{
|
||||||
List<Player> players = Lists.newArrayList(Bukkit.getOnlinePlayers());
|
List<Player> players = Lists.newArrayList(Bukkit.getOnlinePlayers());
|
||||||
|
if (args.length > 0 && args[0].equalsIgnoreCase("-v"))
|
||||||
|
{
|
||||||
|
checkPermission(sender, "plex.list.vanished");
|
||||||
|
players.removeIf(player -> !PlayerMeta.isVanished(player));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
players.removeIf(PlayerMeta::isVanished);
|
||||||
|
}
|
||||||
Component list = Component.empty();
|
Component list = Component.empty();
|
||||||
Component header = Component.text("There " + (players.size() == 1 ? "is" : "are") + " currently").color(NamedTextColor.GRAY)
|
Component header = PlexUtils.messageComponent(players.size() == 1 ? "listHeader" : "listHeaderPlural", players.size(), Bukkit.getMaxPlayers());
|
||||||
.append(Component.space())
|
|
||||||
.append(Component.text(players.size()).color(NamedTextColor.YELLOW))
|
|
||||||
.append(Component.space())
|
|
||||||
.append(Component.text(players.size() == 1 ? "player" : "players").color(NamedTextColor.GRAY))
|
|
||||||
.append(Component.space())
|
|
||||||
.append(Component.text("online out of").color(NamedTextColor.GRAY))
|
|
||||||
.append(Component.space())
|
|
||||||
.append(Component.text(Bukkit.getMaxPlayers()).color(NamedTextColor.YELLOW))
|
|
||||||
.append(Component.space())
|
|
||||||
.append(Component.text(Bukkit.getMaxPlayers() == 1 ? "player." : "players.").color(NamedTextColor.GRAY));
|
|
||||||
send(sender, header);
|
send(sender, header);
|
||||||
if (players.size() == 0)
|
if (players.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < players.size(); i++)
|
for (int i = 0; i < players.size(); i++)
|
||||||
{
|
{
|
||||||
Player player = players.get(i);
|
Player player = players.get(i);
|
||||||
list = list.append(getPlexPlayer(player).getRankFromString().getPrefix()).append(Component.space()).append(Component.text(player.getName()).color(NamedTextColor.WHITE));
|
Component prefix = VaultHook.getPrefix(getPlexPlayer(player));
|
||||||
|
if (prefix != null && !prefix.equals(Component.empty()) && !prefix.equals(Component.space()))
|
||||||
|
{
|
||||||
|
list = list.append(prefix).append(Component.space());
|
||||||
|
}
|
||||||
|
list = list.append(Component.text(player.getName()).color(NamedTextColor.WHITE));
|
||||||
|
if (args.length > 0 && args[0].equalsIgnoreCase("-d"))
|
||||||
|
{
|
||||||
|
list = list.append(Component.space());
|
||||||
|
list = list.append(Component.text("(").color(NamedTextColor.WHITE));
|
||||||
|
list = list.append(player.displayName());
|
||||||
|
list = list.append(Component.text(")").color(NamedTextColor.WHITE));
|
||||||
|
}
|
||||||
if (i != players.size() - 1)
|
if (i != players.size() - 1)
|
||||||
{
|
{
|
||||||
list = list.append(Component.text(",")).append(Component.space());
|
list = list.append(Component.text(",")).append(Component.space());
|
||||||
@ -52,4 +64,13 @@ public class ListCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (args.length == 1 && silentCheckPermission(sender, this.getPermission()))
|
||||||
|
{
|
||||||
|
return List.of("-d", "-v");
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,8 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -12,7 +13,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "localspawn", description = "Teleport to the spawnpoint of the world you are in")
|
@CommandParameters(name = "localspawn", description = "Teleport to the spawnpoint of the world you are in")
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.localspawn", source = RequiredCommandSource.IN_GAME)
|
@CommandPermissions(permission = "plex.localspawn", source = RequiredCommandSource.IN_GAME)
|
||||||
public class LocalSpawnCMD extends PlexCommand
|
public class LocalSpawnCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -22,4 +23,10 @@ public class LocalSpawnCMD extends PlexCommand
|
|||||||
playerSender.teleportAsync(playerSender.getWorld().getSpawnLocation());
|
playerSender.teleportAsync(playerSender.getWorld().getSpawnLocation());
|
||||||
return messageComponent("teleportedToWorldSpawn");
|
return messageComponent("teleportedToWorldSpawn");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
@ -5,7 +5,6 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -15,7 +14,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "lockup", description = "Lockup a player on the server", usage = "/<command> <player>")
|
@CommandParameters(name = "lockup", description = "Lockup a player on the server", usage = "/<command> <player>")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.lockup")
|
@CommandPermissions(permission = "plex.lockup")
|
||||||
public class LockupCMD extends PlexCommand
|
public class LockupCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -28,19 +27,6 @@ public class LockupCMD extends PlexCommand
|
|||||||
Player player = getNonNullPlayer(args[0]);
|
Player player = getNonNullPlayer(args[0]);
|
||||||
PlexPlayer punishedPlayer = getOfflinePlexPlayer(player.getUniqueId());
|
PlexPlayer punishedPlayer = getOfflinePlexPlayer(player.getUniqueId());
|
||||||
|
|
||||||
if (isAdmin(getPlexPlayer(player)))
|
|
||||||
{
|
|
||||||
if (!isConsole(sender))
|
|
||||||
{
|
|
||||||
assert playerSender != null;
|
|
||||||
PlexPlayer plexPlayer1 = getPlexPlayer(playerSender);
|
|
||||||
if (!plexPlayer1.getRankFromString().isAtLeast(getPlexPlayer(player).getRankFromString()))
|
|
||||||
{
|
|
||||||
return messageComponent("higherRankThanYou");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
punishedPlayer.setLockedUp(!punishedPlayer.isLockedUp());
|
punishedPlayer.setLockedUp(!punishedPlayer.isLockedUp());
|
||||||
if (punishedPlayer.isLockedUp())
|
if (punishedPlayer.isLockedUp())
|
||||||
{
|
{
|
||||||
@ -51,8 +37,8 @@ public class LockupCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.lockup") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,7 +4,8 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -13,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.masterbuilderworld", source = RequiredCommandSource.IN_GAME)
|
@CommandPermissions(permission = "plex.masterbuilderworld", source = RequiredCommandSource.IN_GAME)
|
||||||
@CommandParameters(name = "masterbuilderworld", aliases = "mbw", description = "Teleport to the Master Builder world")
|
@CommandParameters(name = "masterbuilderworld", aliases = "mbw", description = "Teleport to the Master Builder world")
|
||||||
public class MasterbuilderworldCMD extends PlexCommand
|
public class MasterbuilderworldCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -30,4 +31,10 @@ public class MasterbuilderworldCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
95
server/src/main/java/dev/plex/command/impl/MobLimitCMD.java
Normal file
95
server/src/main/java/dev/plex/command/impl/MobLimitCMD.java
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import dev.plex.command.PlexCommand;
|
||||||
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@CommandParameters(name = "moblimit", usage = "/<command> [on | off | setmax <limit>]", aliases = "entitylimit", description = "Manages the mob limit per chunk.")
|
||||||
|
@CommandPermissions(permission = "plex.moblimit", source = RequiredCommandSource.ANY)
|
||||||
|
public class MobLimitCMD extends PlexCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
Chunk chunk = playerSender != null ? playerSender.getLocation().getChunk() : Bukkit.getWorlds().get(0).getChunkAt(0, 0);
|
||||||
|
|
||||||
|
int currentLimit = plugin.config.getInt("entity_limit.max_mobs_per_chunk");
|
||||||
|
int currentMobCount = (int) Arrays.stream(chunk.getEntities())
|
||||||
|
.filter(entity -> entity instanceof LivingEntity && !(entity instanceof Player))
|
||||||
|
.count();
|
||||||
|
|
||||||
|
String status = plugin.config.getBoolean("entity_limit.mob_limit_enabled") ? "<green>Enabled" : "<red>Disabled";
|
||||||
|
return PlexUtils.messageComponent("mobLimitStatus", status, currentMobCount, currentLimit, chunk.getX(), chunk.getZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args[0].toLowerCase())
|
||||||
|
{
|
||||||
|
case "on":
|
||||||
|
plugin.config.set("entity_limit.mob_limit_enabled", true);
|
||||||
|
plugin.config.save();
|
||||||
|
return PlexUtils.messageComponent("mobLimitToggle", "enabled");
|
||||||
|
case "off":
|
||||||
|
plugin.config.set("entity_limit.mob_limit_enabled", false);
|
||||||
|
plugin.config.save();
|
||||||
|
return PlexUtils.messageComponent("mobLimitToggle", "disabled");
|
||||||
|
case "setmax":
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (args.length != 2) return usage();
|
||||||
|
|
||||||
|
int newLimit = Integer.parseInt(args[1]);
|
||||||
|
if (newLimit < 0) throw new NumberFormatException();
|
||||||
|
|
||||||
|
int limitCeiling = plugin.config.getInt("entity_limit.mob_limit_ceiling");
|
||||||
|
if (newLimit > limitCeiling)
|
||||||
|
{
|
||||||
|
newLimit = limitCeiling;
|
||||||
|
sender.sendMessage(PlexUtils.messageComponent("mobLimitCeiling"));
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.config.set("entity_limit.max_mobs_per_chunk", newLimit);
|
||||||
|
plugin.config.save();
|
||||||
|
return PlexUtils.messageComponent("mobLimitSet", newLimit);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
return PlexUtils.messageComponent("unableToParseNumber", args[1]);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, this.getPermission()))
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
return Arrays.asList("on", "off", "setmax");
|
||||||
|
}
|
||||||
|
if (args.length == 2 && args[0].equals("setmax"))
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
@ -4,49 +4,118 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.HashMap;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.apache.commons.lang3.text.WordUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Mob;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.mobpurge", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.mobpurge", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "mobpurge", description = "Purge all mobs.", usage = "/<command>", aliases = "mp")
|
@CommandParameters(name = "mobpurge", description = "Purge all mobs.", usage = "/<command> [mob]", aliases = "mp")
|
||||||
public class MobPurgeCMD extends PlexCommand
|
public class MobPurgeCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
|
private final List<EntityType> MOB_TYPES = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, @NotNull String[] args)
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, @NotNull String[] args)
|
||||||
{
|
{
|
||||||
HashMap<String, Integer> entityCounts = new HashMap<>();
|
EntityType type = null;
|
||||||
|
String mobName = null;
|
||||||
for (World world : Bukkit.getWorlds())
|
if (args.length > 0)
|
||||||
{
|
{
|
||||||
for (Entity entity : world.getEntities())
|
try
|
||||||
{
|
{
|
||||||
if (entity instanceof Mob)
|
type = EntityType.valueOf(args[0].toUpperCase());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
String type = entity.getType().name();
|
PlexLog.debug("A genius tried and failed removing the following invalid mob: " + args[0].toUpperCase());
|
||||||
entity.remove();
|
send(sender, messageComponent("notAValidMob"));
|
||||||
|
return null;
|
||||||
entityCounts.put(type, entityCounts.getOrDefault(type, 0) + 1);
|
|
||||||
}
|
}
|
||||||
}
|
if (!MOB_TYPES.contains(type))
|
||||||
}
|
{
|
||||||
|
PlexLog.debug(Arrays.deepToString(MOB_TYPES.toArray()));
|
||||||
int entityCount = entityCounts.values().stream().mapToInt(a -> a).sum();
|
PlexLog.debug("A genius tried to remove a mob that doesn't exist: " + args[0].toUpperCase());
|
||||||
|
sender.sendMessage(messageComponent("notAValidMobButValidEntity"));
|
||||||
PlexUtils.broadcast(messageComponent("removedMobs", sender.getName(), entityCount));
|
|
||||||
|
|
||||||
/*entityCounts.forEach((entityName, numRemoved) -> {
|
|
||||||
sender.sendMessage(messageComponent("removedEntitiesOfType", sender.getName(), numRemoved, entityName));
|
|
||||||
});*/
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (type != null)
|
||||||
|
{
|
||||||
|
mobName = WordUtils.capitalizeFully(type.name().replace("_", " "));
|
||||||
|
PlexLog.debug("The args aren't null so the mob is: " + mobName);
|
||||||
|
}
|
||||||
|
int count = purgeMobs(type);
|
||||||
|
if (type != null)
|
||||||
|
{
|
||||||
|
PlexUtils.broadcast(messageComponent("removedEntitiesOfTypes", sender.getName(), count, mobName));
|
||||||
|
PlexLog.debug("All " + count + " of " + mobName + " were removed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlexUtils.broadcast(messageComponent("removedMobs", sender.getName(), count));
|
||||||
|
PlexLog.debug("All " + count + " valid mobs were removed");
|
||||||
|
}
|
||||||
|
sender.sendMessage(messageComponent("amountOfMobsRemoved", count, (type != null ? mobName : "mob") + multipleS(count)));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String multipleS(int count)
|
||||||
|
{
|
||||||
|
return (count == 1 ? "" : "s");
|
||||||
|
}
|
||||||
|
|
||||||
|
private int purgeMobs(EntityType type)
|
||||||
|
{
|
||||||
|
int removed = 0;
|
||||||
|
for (World world : Bukkit.getWorlds())
|
||||||
|
{
|
||||||
|
for (Entity entity : world.getLivingEntities())
|
||||||
|
{
|
||||||
|
if (entity instanceof LivingEntity && !(entity instanceof Player))
|
||||||
|
{
|
||||||
|
if (type != null && !entity.getType().equals(type))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
entity.remove();
|
||||||
|
removed++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getAllMobs()
|
||||||
|
{
|
||||||
|
List<String> mobs = new ArrayList<>();
|
||||||
|
Arrays.stream(EntityType.values()).filter(EntityType::isAlive).filter(EntityType::isSpawnable).forEach(MOB_TYPES::add);
|
||||||
|
for (EntityType entityType : MOB_TYPES)
|
||||||
|
{
|
||||||
|
mobs.add(entityType.name());
|
||||||
|
}
|
||||||
|
return mobs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (args.length == 1 && silentCheckPermission(sender, this.getPermission()))
|
||||||
|
{
|
||||||
|
return getAllMobs();
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions;
|
|||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.Punishment;
|
import dev.plex.punishment.Punishment;
|
||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
@ -20,7 +19,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "mute", description = "Mute a player on the server", usage = "/<command> <player>", aliases = "stfu")
|
@CommandParameters(name = "mute", description = "Mute a player on the server", usage = "/<command> <player>", aliases = "stfu")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.mute")
|
@CommandPermissions(permission = "plex.mute")
|
||||||
public class MuteCMD extends PlexCommand
|
public class MuteCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -38,7 +37,7 @@ public class MuteCMD extends PlexCommand
|
|||||||
return messageComponent("playerMuted");
|
return messageComponent("playerMuted");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (silentCheckRank(player, Rank.ADMIN, "plex.mute"))
|
if (silentCheckPermission(player, "plex.mute"))
|
||||||
{
|
{
|
||||||
send(sender, messageComponent("higherRankThanYou"));
|
send(sender, messageComponent("higherRankThanYou"));
|
||||||
return null;
|
return null;
|
||||||
@ -47,11 +46,12 @@ public class MuteCMD extends PlexCommand
|
|||||||
Punishment punishment = new Punishment(punishedPlayer.getUuid(), getUUID(sender));
|
Punishment punishment = new Punishment(punishedPlayer.getUuid(), getUUID(sender));
|
||||||
punishment.setCustomTime(false);
|
punishment.setCustomTime(false);
|
||||||
ZonedDateTime date = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
ZonedDateTime date = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
||||||
punishment.setEndDate(date.plusMinutes(5));
|
punishment.setEndDate(date.plusSeconds(plugin.config.getInt("punishments.mute-timer", 300)));
|
||||||
punishment.setType(PunishmentType.MUTE);
|
punishment.setType(PunishmentType.MUTE);
|
||||||
punishment.setPunishedUsername(player.getName());
|
punishment.setPunishedUsername(player.getName());
|
||||||
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
||||||
punishment.setReason("");
|
punishment.setReason("");
|
||||||
|
punishment.setActive(true);
|
||||||
|
|
||||||
plugin.getPunishmentManager().punish(punishedPlayer, punishment);
|
plugin.getPunishmentManager().punish(punishedPlayer, punishment);
|
||||||
PlexUtils.broadcast(messageComponent("mutedPlayer", sender.getName(), player.getName()));
|
PlexUtils.broadcast(messageComponent("mutedPlayer", sender.getName(), player.getName()));
|
||||||
@ -59,8 +59,8 @@ public class MuteCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.mute") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,71 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.AshconInfo;
|
|
||||||
import dev.plex.util.MojangUtils;
|
|
||||||
import dev.plex.util.PlexLog;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import dev.plex.util.TimeUtils;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandParameters(name = "namehistory", description = "Get the name history of a player", usage = "/<command> <player>", aliases = "nh")
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.namehistory")
|
|
||||||
public class NameHistoryCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return usage();
|
|
||||||
}
|
|
||||||
String username = args[0];
|
|
||||||
|
|
||||||
AshconInfo info = MojangUtils.getInfo(username);
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
return messageComponent("nameHistoryDoesntExist");
|
|
||||||
}
|
|
||||||
PlexLog.debug("NameHistory UUID: " + info.getUuid());
|
|
||||||
PlexLog.debug("NameHistory Size: " + info.getUsernameHistories().length);
|
|
||||||
List<Component> historyList = Lists.newArrayList();
|
|
||||||
Arrays.stream(info.getUsernameHistories()).forEach(history ->
|
|
||||||
{
|
|
||||||
if (history.getZonedDateTime() != null)
|
|
||||||
{
|
|
||||||
historyList.add(
|
|
||||||
messageComponent("nameHistoryBody",
|
|
||||||
history.getUsername(),
|
|
||||||
TimeUtils.useTimezone(history.getZonedDateTime())));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
historyList.add(
|
|
||||||
Component.text(history.getUsername()).color(NamedTextColor.GOLD)
|
|
||||||
.append(Component.space()));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
send(sender, messageComponent("nameHistoryTitle", username));
|
|
||||||
send(sender, messageComponent("nameHistorySeparator"));
|
|
||||||
historyList.forEach(component -> send(sender, component));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
|
||||||
{
|
|
||||||
return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,8 +6,6 @@ import dev.plex.command.annotation.CommandParameters;
|
|||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.extra.Note;
|
import dev.plex.punishment.extra.Note;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.storage.StorageType;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
@ -17,7 +15,6 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -26,7 +23,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "notes", description = "Manage notes for a player", usage = "/<command> <player> <list | add <note> | remove <id> | clear>")
|
@CommandParameters(name = "notes", description = "Manage notes for a player", usage = "/<command> <player> <list | add <note> | remove <id> | clear>")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.notes")
|
@CommandPermissions(permission = "plex.notes")
|
||||||
public class NotesCMD extends PlexCommand
|
public class NotesCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -47,8 +44,6 @@ public class NotesCMD extends PlexCommand
|
|||||||
switch (args[1].toLowerCase())
|
switch (args[1].toLowerCase())
|
||||||
{
|
{
|
||||||
case "list":
|
case "list":
|
||||||
{
|
|
||||||
if (plugin.getStorageType() != StorageType.MONGODB)
|
|
||||||
{
|
{
|
||||||
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
||||||
{
|
{
|
||||||
@ -59,16 +54,6 @@ public class NotesCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
readNotes(sender, plexPlayer, notes);
|
readNotes(sender, plexPlayer, notes);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
List<Note> notes = plexPlayer.getNotes();
|
|
||||||
if (notes.size() == 0)
|
|
||||||
{
|
|
||||||
return messageComponent("noNotes");
|
|
||||||
}
|
|
||||||
readNotes(sender, plexPlayer, notes);
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
case "add":
|
case "add":
|
||||||
@ -82,14 +67,7 @@ public class NotesCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
Note note = new Note(plexPlayer.getUuid(), content, playerSender.getUniqueId(), ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE)));
|
Note note = new Note(plexPlayer.getUuid(), content, playerSender.getUniqueId(), ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE)));
|
||||||
plexPlayer.getNotes().add(note);
|
plexPlayer.getNotes().add(note);
|
||||||
if (plugin.getStorageType() != StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
plugin.getSqlNotes().addNote(note);
|
plugin.getSqlNotes().addNote(note);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DataUtils.update(plexPlayer);
|
|
||||||
}
|
|
||||||
return messageComponent("noteAdded");
|
return messageComponent("noteAdded");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,8 +86,6 @@ public class NotesCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
return messageComponent("unableToParseNumber", args[2]);
|
return messageComponent("unableToParseNumber", args[2]);
|
||||||
}
|
}
|
||||||
if (plugin.getStorageType() != StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
||||||
{
|
{
|
||||||
boolean deleted = false;
|
boolean deleted = false;
|
||||||
@ -128,40 +104,15 @@ public class NotesCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
plexPlayer.getNotes().removeIf(note -> note.getId() == id);
|
plexPlayer.getNotes().removeIf(note -> note.getId() == id);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (plexPlayer.getNotes().removeIf(note -> note.getId() == id))
|
|
||||||
{
|
|
||||||
return messageComponent("removedNote", id);
|
|
||||||
}
|
|
||||||
return messageComponent("noteNotFound");
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
case "clear":
|
case "clear":
|
||||||
{
|
|
||||||
if (plugin.getStorageType() != StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
|
||||||
{
|
|
||||||
for (Note note : notes)
|
|
||||||
{
|
|
||||||
plugin.getSqlNotes().deleteNote(note.getId(), plexPlayer.getUuid());
|
|
||||||
}
|
|
||||||
plexPlayer.getNotes().clear();
|
|
||||||
send(sender, messageComponent("clearedNotes", notes.size()));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
int count = plexPlayer.getNotes().size();
|
int count = plexPlayer.getNotes().size();
|
||||||
plexPlayer.getNotes().clear();
|
plexPlayer.getNotes().clear();
|
||||||
DataUtils.update(plexPlayer);
|
DataUtils.update(plexPlayer);
|
||||||
return messageComponent("clearedNotes", count);
|
return messageComponent("clearedNotes", count);
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
return usage();
|
return usage();
|
||||||
@ -171,11 +122,11 @@ public class NotesCMD extends PlexCommand
|
|||||||
|
|
||||||
private void readNotes(@NotNull CommandSender sender, PlexPlayer plexPlayer, List<Note> notes)
|
private void readNotes(@NotNull CommandSender sender, PlexPlayer plexPlayer, List<Note> notes)
|
||||||
{
|
{
|
||||||
AtomicReference<Component> noteList = new AtomicReference<>(Component.text("Player notes for: " + plexPlayer.getName()).color(NamedTextColor.GREEN));
|
AtomicReference<Component> noteList = new AtomicReference<>(messageComponent("notesHeader", plexPlayer.getName()));
|
||||||
for (Note note : notes)
|
for (Note note : notes)
|
||||||
{
|
{
|
||||||
Component noteLine = mmString("<gold><!italic>" + note.getId() + " - Written by: " + DataUtils.getPlayer(note.getWrittenBy()).getName() + " on " + TimeUtils.useTimezone(note.getTimestamp()));
|
Component noteLine = messageComponent("notePrefix", note.getId(), DataUtils.getPlayer(note.getWrittenBy()).getName(), TimeUtils.useTimezone(note.getTimestamp()));
|
||||||
noteLine = noteLine.append(mmString("<newline><yellow># " + note.getNote()));
|
noteLine = noteLine.append(messageComponent("noteLine", note.getNote()));
|
||||||
noteList.set(noteList.get().append(Component.newline()));
|
noteList.set(noteList.get().append(Component.newline()));
|
||||||
noteList.set(noteList.get().append(noteLine));
|
noteList.set(noteList.get().append(noteLine));
|
||||||
}
|
}
|
||||||
@ -183,7 +134,9 @@ public class NotesCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, this.getPermission()))
|
||||||
{
|
{
|
||||||
if (args.length == 1)
|
if (args.length == 1)
|
||||||
{
|
{
|
||||||
@ -195,4 +148,6 @@ public class NotesCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,31 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.command.annotation.System;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandParameters(name = "opall", description = "Op everyone on the server", aliases = "opa")
|
|
||||||
@CommandPermissions(level = Rank.ADMIN)
|
|
||||||
@System(value = "ranks")
|
|
||||||
public class OpAllCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
|
||||||
{
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
player.setOp(true);
|
|
||||||
}
|
|
||||||
PlexUtils.broadcast(messageComponent("oppedAllPlayers", sender.getName()));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.command.annotation.System;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandParameters(name = "op", description = "Op a player on the server", usage = "/<command> <player>")
|
|
||||||
@CommandPermissions(level = Rank.OP)
|
|
||||||
@System(value = "ranks")
|
|
||||||
public class OpCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return usage();
|
|
||||||
}
|
|
||||||
Player player = getNonNullPlayer(args[0]);
|
|
||||||
player.setOp(true);
|
|
||||||
PlexUtils.broadcast(messageComponent("oppedPlayer", sender.getName(), player.getName()));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
|
||||||
{
|
|
||||||
return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,7 +7,6 @@ import dev.plex.command.exception.CommandFailException;
|
|||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.module.PlexModule;
|
import dev.plex.module.PlexModule;
|
||||||
import dev.plex.module.PlexModuleFile;
|
import dev.plex.module.PlexModuleFile;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.BuildInfo;
|
import dev.plex.util.BuildInfo;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
@ -24,7 +23,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.IMPOSTOR, source = RequiredCommandSource.ANY)
|
@CommandPermissions(source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "plex", usage = "/<command> [reload | redis | modules [reload]]", description = "Show information about Plex or reload it")
|
@CommandParameters(name = "plex", usage = "/<command> [reload | redis | modules [reload]]", description = "Show information about Plex or reload it")
|
||||||
public class PlexCMD extends PlexCommand
|
public class PlexCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -35,7 +34,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
if (args.length == 0)
|
if (args.length == 0)
|
||||||
{
|
{
|
||||||
send(sender, mmString("<light_purple>Plex - A new freedom plugin."));
|
send(sender, mmString("<light_purple>Plex - A new freedom plugin."));
|
||||||
send(sender, mmString("<light_purple>Plugin version: <gold>" + plugin.getDescription().getVersion() + " #" + BuildInfo.getNumber() + " <light_purple>Git: <gold>" + BuildInfo.getHead()));
|
send(sender, mmString("<light_purple>Plugin version: <gold>" + plugin.getDescription().getVersion() + " #" + BuildInfo.getNumber() + " <light_purple>Git: <gold>" + BuildInfo.getCommit()));
|
||||||
send(sender, mmString("<light_purple>Authors: <gold>Telesphoreo, Taahh"));
|
send(sender, mmString("<light_purple>Authors: <gold>Telesphoreo, Taahh"));
|
||||||
send(sender, mmString("<light_purple>Built by: <gold>" + BuildInfo.getAuthor() + " <light_purple>on <gold>" + BuildInfo.getDate()));
|
send(sender, mmString("<light_purple>Built by: <gold>" + BuildInfo.getAuthor() + " <light_purple>on <gold>" + BuildInfo.getDate()));
|
||||||
send(sender, mmString("<light_purple>Run <gold>/plex modules <light_purple>to see a list of modules."));
|
send(sender, mmString("<light_purple>Run <gold>/plex modules <light_purple>to see a list of modules."));
|
||||||
@ -44,7 +43,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
if (args[0].equalsIgnoreCase("reload"))
|
if (args[0].equalsIgnoreCase("reload"))
|
||||||
{
|
{
|
||||||
checkRank(sender, Rank.SENIOR_ADMIN, "plex.reload");
|
checkPermission(sender, "plex.reload");
|
||||||
plugin.config.load();
|
plugin.config.load();
|
||||||
send(sender, "Reloaded config file");
|
send(sender, "Reloaded config file");
|
||||||
plugin.messages.load();
|
plugin.messages.load();
|
||||||
@ -54,10 +53,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
send(sender, "Reloaded indefinite bans");
|
send(sender, "Reloaded indefinite bans");
|
||||||
plugin.commands.load();
|
plugin.commands.load();
|
||||||
send(sender, "Reloaded blocked commands file");
|
send(sender, "Reloaded blocked commands file");
|
||||||
plugin.getRankManager().importDefaultRanks();
|
if (!plugin.getServer().getPluginManager().isPluginEnabled("Vault"))
|
||||||
send(sender, "Imported ranks");
|
|
||||||
plugin.setSystem(plugin.config.getString("system"));
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("permissions") && !plugin.getServer().getPluginManager().isPluginEnabled("Vault"))
|
|
||||||
{
|
{
|
||||||
throw new RuntimeException("Vault is required to run on the server if you use permissions!");
|
throw new RuntimeException("Vault is required to run on the server if you use permissions!");
|
||||||
}
|
}
|
||||||
@ -71,7 +67,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
else if (args[0].equalsIgnoreCase("redis"))
|
else if (args[0].equalsIgnoreCase("redis"))
|
||||||
{
|
{
|
||||||
checkRank(sender, Rank.SENIOR_ADMIN, "plex.redis");
|
checkPermission(sender, "plex.redis");
|
||||||
if (!plugin.getRedisConnection().isEnabled())
|
if (!plugin.getRedisConnection().isEnabled())
|
||||||
{
|
{
|
||||||
throw new CommandFailException("&cRedis is not enabled.");
|
throw new CommandFailException("&cRedis is not enabled.");
|
||||||
@ -90,7 +86,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
if (args[1].equalsIgnoreCase("reload"))
|
if (args[1].equalsIgnoreCase("reload"))
|
||||||
{
|
{
|
||||||
checkRank(sender, Rank.EXECUTIVE, "plex.modules.reload");
|
checkPermission(sender, "plex.modules.reload");
|
||||||
plugin.getModuleManager().reloadModules();
|
plugin.getModuleManager().reloadModules();
|
||||||
return mmString("<green>All modules reloaded!");
|
return mmString("<green>All modules reloaded!");
|
||||||
}
|
}
|
||||||
@ -98,7 +94,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
if (!hasUpdateAccess(playerSender, sender))
|
if (!hasUpdateAccess(playerSender, sender))
|
||||||
{
|
{
|
||||||
return messageComponent("noPermissionRank", "an Owner or Developer");
|
return messageComponent("noPermissionRank", "a Developer");
|
||||||
}
|
}
|
||||||
for (PlexModule module : plugin.getModuleManager().getModules())
|
for (PlexModule module : plugin.getModuleManager().getModules())
|
||||||
{
|
{
|
||||||
@ -112,7 +108,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
if (!hasUpdateAccess(playerSender, sender))
|
if (!hasUpdateAccess(playerSender, sender))
|
||||||
{
|
{
|
||||||
return messageComponent("noPermissionRank", "an Owner or Developer");
|
return messageComponent("noPermissionRank", "a Developer");
|
||||||
}
|
}
|
||||||
if (!plugin.getUpdateChecker().getUpdateStatusMessage(sender, false, 0))
|
if (!plugin.getUpdateChecker().getUpdateStatusMessage(sender, false, 0))
|
||||||
{
|
{
|
||||||
@ -129,7 +125,7 @@ public class PlexCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (args.length == 1)
|
if (args.length == 1)
|
||||||
{
|
{
|
||||||
@ -155,13 +151,11 @@ public class PlexCMD extends PlexCommand
|
|||||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(sender.getName());
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(sender.getName());
|
||||||
if (offlinePlayer.hasPlayedBefore())
|
if (offlinePlayer.hasPlayedBefore())
|
||||||
{
|
{
|
||||||
return PlexUtils.DEVELOPERS.contains(offlinePlayer.getUniqueId().toString())
|
return PlexUtils.DEVELOPERS.contains(offlinePlayer.getUniqueId().toString());
|
||||||
|| plugin.config.getStringList("titles.owners").contains(sender.getName());
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
assert player != null;
|
assert player != null;
|
||||||
return PlexUtils.DEVELOPERS.contains(player.getUniqueId().toString())
|
return PlexUtils.DEVELOPERS.contains(player.getUniqueId().toString());
|
||||||
|| plugin.config.getStringList("titles.owners").contains(player.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,34 +1,55 @@
|
|||||||
package dev.plex.command.impl;
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import dev.plex.command.exception.PlayerNotFoundException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.menu.PunishmentMenu;
|
import dev.plex.menu.impl.PunishedPlayerMenu;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.menu.impl.PunishmentMenu;
|
||||||
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "punishments", usage = "/<command> [player]", description = "Opens the Punishments GUI", aliases = "punishlist,punishes")
|
@CommandParameters(name = "punishments", usage = "/<command> [player]", description = "Opens the Punishments GUI", aliases = "punishlist,punishes")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.punishments", source = RequiredCommandSource.IN_GAME)
|
@CommandPermissions(permission = "plex.punishments", source = RequiredCommandSource.IN_GAME)
|
||||||
public class PunishmentsCMD extends PlexCommand
|
public class PunishmentsCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
{
|
{
|
||||||
new PunishmentMenu().openInv(playerSender, 0);
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
new PunishmentMenu().open(playerSender);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!DataUtils.hasPlayedBefore(args[0]))
|
||||||
|
{
|
||||||
|
throw new PlayerNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[0]);
|
||||||
|
final PlexPlayer player = offlinePlayer.isOnline() ? getOnlinePlexPlayer(args[0]) : getOfflinePlexPlayer(offlinePlayer.getUniqueId());
|
||||||
|
|
||||||
|
new PunishedPlayerMenu(player).open(playerSender);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.command.annotation.System;
|
|
||||||
import dev.plex.command.exception.CommandFailException;
|
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.rank", source = RequiredCommandSource.ANY)
|
|
||||||
@CommandParameters(name = "rank", description = "Displays your rank")
|
|
||||||
@System(value = "ranks")
|
|
||||||
public class RankCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length == 0)
|
|
||||||
{
|
|
||||||
if (isConsole(sender))
|
|
||||||
{
|
|
||||||
throw new CommandFailException("<red>When using the console, you must specify a player's rank.");
|
|
||||||
}
|
|
||||||
if (!(playerSender == null))
|
|
||||||
{
|
|
||||||
Rank rank = getPlexPlayer(playerSender).getRankFromString();
|
|
||||||
return messageComponent("yourRank", rank.isAtLeast(Rank.ADMIN) && !getPlexPlayer(playerSender).isAdminActive() ? (playerSender.isOp() ? Rank.OP.getReadable() : Rank.NONOP.getReadable()) : rank.getReadable());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Player player = getNonNullPlayer(args[0]);
|
|
||||||
Rank rank = getPlexPlayer(player).getRankFromString();
|
|
||||||
return messageComponent("otherRank", player.getName(), rank.isAtLeast(Rank.ADMIN) && !getPlexPlayer(player).isAdminActive() ? (player.isOp() ? Rank.OP.getReadable() : Rank.NONOP.getReadable()) : rank.getReadable());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
|
||||||
{
|
|
||||||
if (args.length == 1)
|
|
||||||
{
|
|
||||||
return PlexUtils.getPlayerNameList();
|
|
||||||
}
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,8 +4,9 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -13,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, permission = "plex.rawsay", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.rawsay", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "rawsay", usage = "/<command> <message>", description = "Displays a raw message to everyone")
|
@CommandParameters(name = "rawsay", usage = "/<command> <message>", description = "Displays a raw message to everyone")
|
||||||
public class RawSayCMD extends PlexCommand
|
public class RawSayCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -28,4 +29,10 @@ public class RawSayCMD extends PlexCommand
|
|||||||
PlexUtils.broadcast(StringUtils.join(args, " "));
|
PlexUtils.broadcast(StringUtils.join(args, " "));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.cache.DataUtils;
|
||||||
|
import dev.plex.command.PlexCommand;
|
||||||
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
|
import dev.plex.player.PlexPlayer;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.List;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "plex.removeloginmessage", source = RequiredCommandSource.ANY)
|
||||||
|
@CommandParameters(name = "removeloginmessage", usage = "/<command> [-o <player>]", description = "Remove your own (or someone else's) login message", aliases = "rlm,removeloginmsg")
|
||||||
|
public class RemoveLoginMessageCMD extends PlexCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 0 && !isConsole(sender))
|
||||||
|
{
|
||||||
|
if (playerSender != null)
|
||||||
|
{
|
||||||
|
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayer(playerSender.getUniqueId());
|
||||||
|
plexPlayer.setLoginMessage("");
|
||||||
|
return messageComponent("removedOwnLoginMessage");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("-o"))
|
||||||
|
{
|
||||||
|
checkPermission(sender, "plex.removeloginmessage.others");
|
||||||
|
|
||||||
|
if (args.length < 2)
|
||||||
|
{
|
||||||
|
return messageComponent("specifyPlayer");
|
||||||
|
}
|
||||||
|
|
||||||
|
PlexPlayer plexPlayer = DataUtils.getPlayer(args[1]);
|
||||||
|
if (plexPlayer == null)
|
||||||
|
{
|
||||||
|
return messageComponent("playerNotFound");
|
||||||
|
}
|
||||||
|
plexPlayer.setLoginMessage("");
|
||||||
|
return messageComponent("removedOtherLoginMessage", plexPlayer.getName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return messageComponent("noPermissionConsole");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, "plex.removeloginmessage.others"))
|
||||||
|
{
|
||||||
|
return List.of("-o");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return args.length == 2 && silentCheckPermission(sender, "plex.removeloginmessage.others") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
@ -4,8 +4,9 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -13,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.say", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.say", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "say", usage = "/<command> <message>", description = "Displays a message to everyone")
|
@CommandParameters(name = "say", usage = "/<command> <message>", description = "Displays a message to everyone")
|
||||||
public class SayCMD extends PlexCommand
|
public class SayCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -28,4 +29,10 @@ public class SayCMD extends PlexCommand
|
|||||||
PlexUtils.broadcast(PlexUtils.messageComponent("sayMessage", sender.getName(), PlexUtils.mmStripColor(StringUtils.join(args, " "))));
|
PlexUtils.broadcast(PlexUtils.messageComponent("sayMessage", sender.getName(), PlexUtils.mmStripColor(StringUtils.join(args, " "))));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.cache.DataUtils;
|
||||||
|
import dev.plex.command.PlexCommand;
|
||||||
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import dev.plex.command.exception.CommandFailException;
|
||||||
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
|
import dev.plex.player.PlexPlayer;
|
||||||
|
import dev.plex.util.PlexLog;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.util.List;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "plex.setloginmessage", source = RequiredCommandSource.ANY)
|
||||||
|
@CommandParameters(name = "setloginmessage", usage = "/<command> [-o <player>] <message>", description = "Sets your (or someone else's) login message", aliases = "slm,setloginmsg")
|
||||||
|
public class SetLoginMessageCMD extends PlexCommand
|
||||||
|
{
|
||||||
|
private final boolean nameRequired = plugin.getConfig().getBoolean("loginmessages.name");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
|
if (playerSender != null)
|
||||||
|
{
|
||||||
|
if (args[0].equals("-o"))
|
||||||
|
{
|
||||||
|
checkPermission(sender, "plex.setloginmessage.others");
|
||||||
|
|
||||||
|
if (args.length < 2)
|
||||||
|
{
|
||||||
|
return messageComponent("specifyPlayer");
|
||||||
|
}
|
||||||
|
if (args.length < 3)
|
||||||
|
{
|
||||||
|
return messageComponent("specifyLoginMessage");
|
||||||
|
}
|
||||||
|
PlexPlayer plexPlayer = DataUtils.getPlayer(args[1]);
|
||||||
|
if (plexPlayer == null)
|
||||||
|
{
|
||||||
|
return messageComponent("playerNotFound");
|
||||||
|
}
|
||||||
|
String message = StringUtils.join(args, " ", 2, args.length);
|
||||||
|
message = message.replace(plexPlayer.getName(), "%player%");
|
||||||
|
validateMessage(message);
|
||||||
|
plexPlayer.setLoginMessage(message);
|
||||||
|
return messageComponent("setOtherPlayersLoginMessage", plexPlayer.getName(),
|
||||||
|
MiniMessage.miniMessage().serialize(PlexUtils.stringToComponent(message.replace("%player%", plexPlayer.getName()))));
|
||||||
|
}
|
||||||
|
if (isConsole(sender))
|
||||||
|
{
|
||||||
|
return messageComponent("noPermissionConsole");
|
||||||
|
}
|
||||||
|
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayer(playerSender.getUniqueId());
|
||||||
|
String message = StringUtils.join(args, " ", 0, args.length)
|
||||||
|
.replace(plexPlayer.getName(), "%player%");
|
||||||
|
validateMessage(message);
|
||||||
|
plexPlayer.setLoginMessage(message);
|
||||||
|
return messageComponent("setOwnLoginMessage", PlexUtils.stringToComponent(message.replace("%player%", plexPlayer.getName())));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateMessage(String message)
|
||||||
|
{
|
||||||
|
if (nameRequired && !message.contains("%player%"))
|
||||||
|
{
|
||||||
|
PlexLog.debug("Validating login message has a valid name in it");
|
||||||
|
throw new CommandFailException(messageString("nameRequired"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, "plex.setloginmessage"))
|
||||||
|
{
|
||||||
|
return List.of("-o");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return args.length == 2 && args[0].equalsIgnoreCase("-o") && silentCheckPermission(sender, "plex.setloginmessage") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
@ -7,7 +7,6 @@ import dev.plex.command.source.RequiredCommandSource;
|
|||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.Punishment;
|
import dev.plex.punishment.Punishment;
|
||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
@ -15,7 +14,6 @@ import java.time.ZonedDateTime;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import net.kyori.adventure.title.Title;
|
import net.kyori.adventure.title.Title;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -27,7 +25,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.smite", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.smite", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "smite", usage = "/<command> <player> [reason] [-ci | -q]", description = "Someone being a little bitch? Smite them down...")
|
@CommandParameters(name = "smite", usage = "/<command> <player> [reason] [-ci | -q]", description = "Someone being a little bitch? Smite them down...")
|
||||||
public class SmiteCMD extends PlexCommand
|
public class SmiteCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -78,27 +76,16 @@ public class SmiteCMD extends PlexCommand
|
|||||||
final Player player = getNonNullPlayer(args[0]);
|
final Player player = getNonNullPlayer(args[0]);
|
||||||
final PlexPlayer plexPlayer = getPlexPlayer(player);
|
final PlexPlayer plexPlayer = getPlexPlayer(player);
|
||||||
|
|
||||||
Title title = Title.title(Component.text("You've been smitten.").color(NamedTextColor.RED), Component.text("Be sure to follow the rules!").color(NamedTextColor.YELLOW));
|
Title title = Title.title(messageComponent("smiteTitleHeader"), messageComponent("smiteTitleMessage", reason, sender.getName()));
|
||||||
player.showTitle(title);
|
player.showTitle(title);
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
{
|
{
|
||||||
PlexUtils.broadcast(mmString("<red>" + player.getName() + " has been a naughty, naughty boy."));
|
PlexUtils.broadcast(messageComponent("smiteBroadcast", player.getName(), reason != null ? reason : messageString("noReasonProvided"), sender.getName()));
|
||||||
if (reason != null)
|
|
||||||
{
|
|
||||||
PlexUtils.broadcast(mmString(" <red>Reason: " + "<yellow>" + reason));
|
|
||||||
}
|
|
||||||
PlexUtils.broadcast(mmString(" <red>Smitten by: " + "<yellow>" + sender.getName()));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
send(sender, "Smitten " + player.getName() + " quietly.");
|
send(sender, messageComponent("smittenQuietly", player.getName()));
|
||||||
}
|
|
||||||
|
|
||||||
// Deop
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
player.setOp(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set gamemode to survival
|
// Set gamemode to survival
|
||||||
@ -135,15 +122,15 @@ public class SmiteCMD extends PlexCommand
|
|||||||
if (reason != null)
|
if (reason != null)
|
||||||
{
|
{
|
||||||
punishment.setReason(reason);
|
punishment.setReason(reason);
|
||||||
send(player, mmString("<red>You've been smitten. Reason: <yellow>" + reason));
|
|
||||||
}
|
}
|
||||||
|
send(player, messageComponent("smitten", reason != null ? reason : messageString("noReasonProvided")));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (checkTab(sender, Rank.ADMIN, "plex.smite") && args.length == 1)
|
if (silentCheckPermission(sender, this.getPermission()) && args.length == 1)
|
||||||
{
|
{
|
||||||
return PlexUtils.getPlayerNameList();
|
return PlexUtils.getPlayerNameList();
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions;
|
|||||||
import dev.plex.command.exception.CommandFailException;
|
import dev.plex.command.exception.CommandFailException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.event.GameModeUpdateEvent;
|
import dev.plex.event.GameModeUpdateEvent;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -18,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.gamemode.spectator", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.gamemode.spectator", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "spectator", aliases = "gmsp,egmsp,spec", description = "Set your own or another player's gamemode to spectator mode")
|
@CommandParameters(name = "spectator", aliases = "gmsp,egmsp,spec", description = "Set your own or another player's gamemode to spectator mode")
|
||||||
public class SpectatorCMD extends PlexCommand
|
public class SpectatorCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -29,13 +28,13 @@ public class SpectatorCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
if (isConsole(sender))
|
if (isConsole(sender))
|
||||||
{
|
{
|
||||||
throw new CommandFailException(PlexUtils.messageString("consoleMustDefinePlayer"));
|
throw new CommandFailException(messageString("consoleMustDefinePlayer"));
|
||||||
}
|
}
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, playerSender, GameMode.SPECTATOR));
|
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, playerSender, GameMode.SPECTATOR));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkRank(sender, Rank.ADMIN, "plex.gamemode.spectator.others"))
|
if (checkPermission(sender,"plex.gamemode.spectator.others"))
|
||||||
{
|
{
|
||||||
if (args[0].equals("-a"))
|
if (args[0].equals("-a"))
|
||||||
{
|
{
|
||||||
@ -55,9 +54,9 @@ public class SpectatorCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (checkTab(sender, Rank.ADMIN, "plex.gamemode.spectator.others"))
|
if (silentCheckPermission(sender,"plex.gamemode.spectator.others"))
|
||||||
{
|
{
|
||||||
return PlexUtils.getPlayerNameList();
|
return PlexUtils.getPlayerNameList();
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions;
|
|||||||
import dev.plex.command.exception.CommandFailException;
|
import dev.plex.command.exception.CommandFailException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.event.GameModeUpdateEvent;
|
import dev.plex.event.GameModeUpdateEvent;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -18,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.gamemode.survival", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.gamemode.survival", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "survival", aliases = "gms,egms,esurvival,survivalmode,esurvivalmode", description = "Set your own or another player's gamemode to survival mode")
|
@CommandParameters(name = "survival", aliases = "gms,egms,esurvival,survivalmode,esurvivalmode", description = "Set your own or another player's gamemode to survival mode")
|
||||||
public class SurvivalCMD extends PlexCommand
|
public class SurvivalCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -29,13 +28,13 @@ public class SurvivalCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
if (isConsole(sender))
|
if (isConsole(sender))
|
||||||
{
|
{
|
||||||
throw new CommandFailException(PlexUtils.messageString("consoleMustDefinePlayer"));
|
throw new CommandFailException(messageString("consoleMustDefinePlayer"));
|
||||||
}
|
}
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, playerSender, GameMode.SURVIVAL));
|
Bukkit.getServer().getPluginManager().callEvent(new GameModeUpdateEvent(sender, playerSender, GameMode.SURVIVAL));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkRank(sender, Rank.ADMIN, "plex.gamemode.survival.others"))
|
if (checkPermission(sender,"plex.gamemode.survival.others"))
|
||||||
{
|
{
|
||||||
if (args[0].equals("-a"))
|
if (args[0].equals("-a"))
|
||||||
{
|
{
|
||||||
@ -56,9 +55,9 @@ public class SurvivalCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (checkTab(sender, Rank.ADMIN, "plex.gamemode.survival.others"))
|
if (silentCheckPermission(sender,"plex.gamemode.survival.others"))
|
||||||
{
|
{
|
||||||
return PlexUtils.getPlayerNameList();
|
return PlexUtils.getPlayerNameList();
|
||||||
}
|
}
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
package dev.plex.command.impl;
|
|
||||||
|
|
||||||
import com.google.common.base.Splitter;
|
|
||||||
import dev.plex.command.PlexCommand;
|
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.inventory.Book;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@CommandParameters(name = "totalfreedommod", description = "You can't simpy do that.", aliases = "tfm")
|
|
||||||
@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.ANY)
|
|
||||||
|
|
||||||
public class TFMCMD extends PlexCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, @NotNull String[] args)
|
|
||||||
{
|
|
||||||
if (playerSender != null)
|
|
||||||
{
|
|
||||||
String simpy = "It's not about credit or discredit, it's about copyright of TFM. Looking at Plex's source code, it looks like a bunch of copy-pasted source code from TFM and Aero (utility plugin). You just put it under a different license and pretended it's yours. You can't simpy do that. You have to remove all parts which infringe on the TFM license (as per the TFM repository) and the Aero License (as per the Aero repository) or otherwise comply to the license requirements.";
|
|
||||||
List<String> pages = Splitter.fixedLength(256).splitToList(simpy);
|
|
||||||
List<Component> pageComponents = new ArrayList<>();
|
|
||||||
|
|
||||||
for (String page : pages)
|
|
||||||
{
|
|
||||||
pageComponents.add(PlexUtils.mmDeserialize("<rainbow>" + page + "</rainbow>"));
|
|
||||||
}
|
|
||||||
|
|
||||||
playerSender.openBook(Book.builder()
|
|
||||||
.title(Component.text("TFM License"))
|
|
||||||
.author(Component.text("Prozza"))
|
|
||||||
.pages(pageComponents));
|
|
||||||
}
|
|
||||||
|
|
||||||
return PlexUtils.mmDeserialize("<rainbow>It's not about credit or discredit, it's about copyright of TFM.<br>Looking at Plex's source code, it looks like a bunch of copy-pasted source code from TFM and Aero (utility plugin). You just put it under a different license and pretended it's yours.<br>You can't simpy do that. You have to remove all parts which infringe on the TFM license (as per the TFM repository) and the Aero License (as per the Aero repository) or otherwise comply to the license requirements.</rainbow>");
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,9 +6,10 @@ import dev.plex.command.annotation.CommandParameters;
|
|||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.minimessage.SafeMiniMessage;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
@ -19,7 +20,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.tag", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.tag", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "tag", aliases = "prefix", description = "Set or clear your prefix", usage = "/<command> <set <prefix> | clear <player>>")
|
@CommandParameters(name = "tag", aliases = "prefix", description = "Set or clear your prefix", usage = "/<command> <set <prefix> | clear <player>>")
|
||||||
public class TagCMD extends PlexCommand
|
public class TagCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -47,16 +48,15 @@ public class TagCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
return usage("/tag set <prefix>");
|
return usage("/tag set <prefix>");
|
||||||
}
|
}
|
||||||
String prefix = PlexUtils.cleanString(StringUtils.join(args, " ", 1, args.length));
|
|
||||||
|
|
||||||
Component convertedComponent = SafeMiniMessage.mmDeserializeWithoutEvents(prefix);
|
Component convertedComponent = PlexUtils.stringToComponent(StringUtils.join(args, " ", 1, args.length));
|
||||||
|
|
||||||
if (PlainTextComponentSerializer.plainText().serialize(convertedComponent).length() > plugin.config.getInt("chat.max-tag-length", 16))
|
if (PlainTextComponentSerializer.plainText().serialize(convertedComponent).length() > plugin.config.getInt("chat.max-tag-length", 16))
|
||||||
{
|
{
|
||||||
return messageComponent("maximumPrefixLength", plugin.config.getInt("chat.max-tag-length", 16));
|
return messageComponent("maximumPrefixLength", plugin.config.getInt("chat.max-tag-length", 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
player.setPrefix(prefix);
|
player.setPrefix(MiniMessage.miniMessage().serialize(convertedComponent));
|
||||||
DataUtils.update(player);
|
DataUtils.update(player);
|
||||||
return messageComponent("prefixSetTo", MiniMessage.miniMessage().serialize(convertedComponent));
|
return messageComponent("prefixSetTo", MiniMessage.miniMessage().serialize(convertedComponent));
|
||||||
}
|
}
|
||||||
@ -76,20 +76,39 @@ public class TagCMD extends PlexCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
PlexPlayer player = DataUtils.getPlayer(playerSender.getUniqueId());
|
PlexPlayer player = DataUtils.getPlayer(playerSender.getUniqueId());
|
||||||
player.setPrefix("");
|
player.setPrefix(null);
|
||||||
DataUtils.update(player);
|
DataUtils.update(player);
|
||||||
return messageComponent("prefixCleared");
|
return messageComponent("prefixCleared");
|
||||||
}
|
}
|
||||||
|
checkPermission(sender, "plex.tag.clear.others");
|
||||||
checkRank(sender, Rank.ADMIN, "plex.tag.clear.others");
|
|
||||||
Player target = getNonNullPlayer(args[1]);
|
Player target = getNonNullPlayer(args[1]);
|
||||||
PlexPlayer plexTarget = DataUtils.getPlayer(target.getUniqueId());
|
PlexPlayer plexTarget = DataUtils.getPlayer(target.getUniqueId());
|
||||||
plexTarget.setPrefix("");
|
plexTarget.setPrefix(null);
|
||||||
DataUtils.update(plexTarget);
|
DataUtils.update(plexTarget);
|
||||||
return messageComponent("otherPrefixCleared", target.getName());
|
return messageComponent("otherPrefixCleared", target.getName());
|
||||||
}
|
}
|
||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
return Arrays.asList("set", "clear");
|
||||||
|
}
|
||||||
|
if (args.length == 2)
|
||||||
|
{
|
||||||
|
if (args[0].equalsIgnoreCase("clear"))
|
||||||
|
{
|
||||||
|
if (silentCheckPermission(sender, "plex.tag.clear.others"))
|
||||||
|
{
|
||||||
|
return PlexUtils.getPlayerNameList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,13 +10,12 @@ import dev.plex.command.source.RequiredCommandSource;
|
|||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.Punishment;
|
import dev.plex.punishment.Punishment;
|
||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.BungeeUtil;
|
import dev.plex.util.BungeeUtil;
|
||||||
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
import dev.plex.util.WebUtils;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -25,8 +24,8 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "tempban", usage = "/<command> <player> <time> [reason]", description = "Temporarily ban a player")
|
@CommandParameters(name = "tempban", usage = "/<command> <player> <time> [reason] [-rb]", description = "Temporarily ban a player")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.tempban", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.tempban", source = RequiredCommandSource.ANY)
|
||||||
|
|
||||||
public class TempbanCMD extends PlexCommand
|
public class TempbanCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -38,65 +37,87 @@ public class TempbanCMD extends PlexCommand
|
|||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID targetUUID = WebUtils.getFromName(args[0]);
|
PlexPlayer target = DataUtils.getPlayer(args[0]);
|
||||||
String reason;
|
String reason;
|
||||||
|
|
||||||
if (targetUUID == null || !DataUtils.hasPlayedBefore(targetUUID))
|
if (target == null)
|
||||||
{
|
{
|
||||||
throw new PlayerNotFoundException();
|
throw new PlayerNotFoundException();
|
||||||
}
|
}
|
||||||
|
Player player = Bukkit.getPlayer(target.getUuid());
|
||||||
|
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(targetUUID);
|
if (plugin.getPunishmentManager().isBanned(target.getUuid()))
|
||||||
Player player = Bukkit.getPlayer(targetUUID);
|
|
||||||
|
|
||||||
if (isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
if (!isConsole(sender))
|
|
||||||
{
|
|
||||||
assert playerSender != null;
|
|
||||||
PlexPlayer plexPlayer1 = getPlexPlayer(playerSender);
|
|
||||||
if (!plexPlayer1.getRankFromString().isAtLeast(plexPlayer.getRankFromString()) && plexPlayer.isAdminActive())
|
|
||||||
{
|
|
||||||
return messageComponent("higherRankThanYou");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.getPunishmentManager().isBanned(targetUUID))
|
|
||||||
{
|
{
|
||||||
return messageComponent("playerBanned");
|
return messageComponent("playerBanned");
|
||||||
}
|
}
|
||||||
Punishment punishment = new Punishment(targetUUID, getUUID(sender));
|
Punishment punishment = new Punishment(target.getUuid(), getUUID(sender));
|
||||||
punishment.setType(PunishmentType.TEMPBAN);
|
punishment.setType(PunishmentType.TEMPBAN);
|
||||||
|
boolean rollBack = false;
|
||||||
if (args.length > 2)
|
if (args.length > 2)
|
||||||
{
|
{
|
||||||
reason = StringUtils.join(args, " ", 2, args.length);
|
reason = StringUtils.join(args, " ", 2, args.length);
|
||||||
punishment.setReason(reason);
|
String newReason = StringUtils.normalizeSpace(reason.replace("-nrb", ""));
|
||||||
|
punishment.setReason(newReason.trim().isEmpty() ? messageString("noReasonProvided") : newReason);
|
||||||
|
rollBack = reason.startsWith("-rb") || reason.endsWith("-rb");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
punishment.setReason("No reason provided.");
|
punishment.setReason(messageString("noReasonProvided"));
|
||||||
}
|
}
|
||||||
punishment.setPunishedUsername(plexPlayer.getName());
|
punishment.setPunishedUsername(target.getName());
|
||||||
punishment.setEndDate(TimeUtils.createDate(args[1]));
|
punishment.setEndDate(TimeUtils.createDate(args[1]));
|
||||||
punishment.setCustomTime(false);
|
punishment.setCustomTime(false);
|
||||||
punishment.setActive(!isAdmin(plexPlayer));
|
punishment.setActive(true);
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
||||||
}
|
}
|
||||||
plugin.getPunishmentManager().punish(plexPlayer, punishment);
|
plugin.getPunishmentManager().punish(target, punishment);
|
||||||
PlexUtils.broadcast(messageComponent("banningPlayer", sender.getName(), plexPlayer.getName()));
|
PlexUtils.broadcast(messageComponent("banningPlayer", sender.getName(), target.getName()));
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
BungeeUtil.kickPlayer(player, Punishment.generateBanMessage(punishment));
|
BungeeUtil.kickPlayer(player, Punishment.generateBanMessage(punishment));
|
||||||
}
|
}
|
||||||
|
if (rollBack)
|
||||||
|
{
|
||||||
|
/*if (plugin.getPrismHook().hasPrism()) {
|
||||||
|
PrismParameters parameters = plugin.getPrismHook().prismApi().createParameters();
|
||||||
|
parameters.addActionType("block-place");
|
||||||
|
parameters.addActionType("block-break");
|
||||||
|
parameters.addActionType("block-burn");
|
||||||
|
parameters.addActionType("entity-spawn");
|
||||||
|
parameters.addActionType("entity-kill");
|
||||||
|
parameters.addActionType("entity-explode");
|
||||||
|
parameters.addPlayerName(plexPlayer.getName());
|
||||||
|
parameters.setBeforeTime(Instant.now().toEpochMilli());
|
||||||
|
parameters.setProcessType(PrismProcessType.ROLLBACK);
|
||||||
|
final Future<Result> result = plugin.getPrismHook().prismApi().performLookup(parameters, sender);
|
||||||
|
Bukkit.getAsyncScheduler().runNow(plugin, scheduledTask -> {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
final Result done = result.get();
|
||||||
|
} catch (InterruptedException | ExecutionException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else */
|
||||||
|
if (plugin.getCoreProtectHook() != null && plugin.getCoreProtectHook().hasCoreProtect())
|
||||||
|
{
|
||||||
|
PlexLog.debug("Testing coreprotect");
|
||||||
|
Bukkit.getAsyncScheduler().runNow(plugin, scheduledTask ->
|
||||||
|
{
|
||||||
|
plugin.getCoreProtectHook().coreProtectAPI().performRollback(86400, Collections.singletonList(target.getName()), null, null, null, null, 0, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.tempban") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
91
server/src/main/java/dev/plex/command/impl/TempmuteCMD.java
Normal file
91
server/src/main/java/dev/plex/command/impl/TempmuteCMD.java
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.command.PlexCommand;
|
||||||
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import dev.plex.player.PlexPlayer;
|
||||||
|
import dev.plex.punishment.Punishment;
|
||||||
|
import dev.plex.punishment.PunishmentType;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import dev.plex.util.TimeUtils;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@CommandParameters(name = "tempmute", description = "Temporarily mute a player on the server",
|
||||||
|
usage = "/<command> <player> <time> [reason]", aliases = "tmute")
|
||||||
|
@CommandPermissions(permission = "plex.tempmute")
|
||||||
|
public class TempmuteCMD extends PlexCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length < 2)
|
||||||
|
{
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = getNonNullPlayer(args[0]);
|
||||||
|
PlexPlayer punishedPlayer = getOfflinePlexPlayer(player.getUniqueId());
|
||||||
|
|
||||||
|
if (punishedPlayer.isMuted())
|
||||||
|
{
|
||||||
|
return messageComponent("playerMuted");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (silentCheckPermission(player, "plex.tempmute"))
|
||||||
|
{
|
||||||
|
send(sender, messageComponent("higherRankThanYou"));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZonedDateTime endDate;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
endDate = TimeUtils.createDate(args[1]);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
return messageComponent("invalidTimeFormat");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endDate.isBefore(ZonedDateTime.now()))
|
||||||
|
{
|
||||||
|
return messageComponent("timeMustBeFuture");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZonedDateTime oneWeekFromNow = ZonedDateTime.now().plusWeeks(1);
|
||||||
|
if (endDate.isAfter(oneWeekFromNow))
|
||||||
|
{
|
||||||
|
return messageComponent("maxTimeExceeded");
|
||||||
|
}
|
||||||
|
|
||||||
|
final String reason = args.length >= 3 ? String.join(" ", Arrays.copyOfRange(args, 2, args.length))
|
||||||
|
: messageString("noReasonProvided");
|
||||||
|
|
||||||
|
Punishment punishment = new Punishment(punishedPlayer.getUuid(), getUUID(sender));
|
||||||
|
punishment.setCustomTime(true);
|
||||||
|
punishment.setEndDate(endDate);
|
||||||
|
punishment.setType(PunishmentType.MUTE);
|
||||||
|
punishment.setPunishedUsername(player.getName());
|
||||||
|
punishment.setIp(player.getAddress().getAddress().getHostAddress().trim());
|
||||||
|
punishment.setReason(reason);
|
||||||
|
punishment.setActive(true);
|
||||||
|
|
||||||
|
plugin.getPunishmentManager().punish(punishedPlayer, punishment);
|
||||||
|
PlexUtils.broadcast(messageComponent("tempMutedPlayer", sender.getName(), player.getName(), TimeUtils.formatRelativeTime(endDate)));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
@ -5,8 +5,7 @@ import dev.plex.command.PlexCommand;
|
|||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.menu.ToggleMenu;
|
import dev.plex.menu.impl.ToggleMenu;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -17,7 +16,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "toggle", description = "Allows toggling various server aspects through a GUI", aliases = "toggles")
|
@CommandParameters(name = "toggle", description = "Allows toggling various server aspects through a GUI", aliases = "toggles")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.toggle", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.toggle", source = RequiredCommandSource.ANY)
|
||||||
public class ToggleCMD extends PlexCommand
|
public class ToggleCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -32,6 +31,8 @@ public class ToggleCMD extends PlexCommand
|
|||||||
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Fluidspread" + status("fluidspread")));
|
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Fluidspread" + status("fluidspread")));
|
||||||
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Drops" + status("drops")));
|
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Drops" + status("drops")));
|
||||||
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Redstone" + status("redstone")));
|
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Redstone" + status("redstone")));
|
||||||
|
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - PVP" + status("pvp")));
|
||||||
|
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Chat" + status("chat")));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
switch (args[0].toLowerCase())
|
switch (args[0].toLowerCase())
|
||||||
@ -52,20 +53,29 @@ public class ToggleCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
return toggle("redstone");
|
return toggle("redstone");
|
||||||
}
|
}
|
||||||
|
case "pvp" ->
|
||||||
|
{
|
||||||
|
return toggle("pvp");
|
||||||
|
}
|
||||||
|
case "chat" ->
|
||||||
|
{
|
||||||
|
PlexUtils.broadcast(PlexUtils.messageComponent("chatToggled", sender.getName(), plugin.toggles.getBoolean("chat") ? "off" : "on"));
|
||||||
|
return toggle("chat");
|
||||||
|
}
|
||||||
default ->
|
default ->
|
||||||
{
|
{
|
||||||
return messageComponent("invalidToggle");
|
return messageComponent("invalidToggle");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
new ToggleMenu().openInv(playerSender, 0);
|
new ToggleMenu().open(playerSender);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String status(String toggle)
|
private String status(String toggle)
|
||||||
|
@ -9,11 +9,8 @@ import dev.plex.command.exception.PlayerNotBannedException;
|
|||||||
import dev.plex.command.exception.PlayerNotFoundException;
|
import dev.plex.command.exception.PlayerNotFoundException;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.WebUtils;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -21,7 +18,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandParameters(name = "unban", usage = "/<command> <player>", description = "Unbans a player, offline or online")
|
@CommandParameters(name = "unban", usage = "/<command> <player>", description = "Unbans a player, offline or online")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.ban", source = RequiredCommandSource.ANY)
|
@CommandPermissions(permission = "plex.ban", source = RequiredCommandSource.ANY)
|
||||||
|
|
||||||
public class UnbanCMD extends PlexCommand
|
public class UnbanCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -35,31 +32,30 @@ public class UnbanCMD extends PlexCommand
|
|||||||
|
|
||||||
if (args.length == 1)
|
if (args.length == 1)
|
||||||
{
|
{
|
||||||
UUID targetUUID = WebUtils.getFromName(args[0]);
|
PlexPlayer target = DataUtils.getPlayer(args[0]);
|
||||||
|
|
||||||
if (targetUUID == null || !DataUtils.hasPlayedBefore(targetUUID))
|
if (target == null)
|
||||||
{
|
{
|
||||||
throw new PlayerNotFoundException();
|
throw new PlayerNotFoundException();
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.getPunishmentManager().isAsyncBanned(targetUUID).whenComplete((aBoolean, throwable) ->
|
plugin.getPunishmentManager().isAsyncBanned(target.getUuid()).whenComplete((aBoolean, throwable) ->
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = getOfflinePlexPlayer(targetUUID);
|
|
||||||
if (!aBoolean)
|
if (!aBoolean)
|
||||||
{
|
{
|
||||||
send(sender, PlexUtils.mmDeserialize(new PlayerNotBannedException().getMessage()));
|
send(sender, PlexUtils.mmDeserialize(new PlayerNotBannedException().getMessage()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plugin.getPunishmentManager().unban(targetUUID);
|
plugin.getPunishmentManager().unban(target.getUuid());
|
||||||
PlexUtils.broadcast(messageComponent("unbanningPlayer", sender.getName(), plexPlayer.getName()));
|
PlexUtils.broadcast(messageComponent("unbanningPlayer", sender.getName(), target.getName()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.unban") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
package dev.plex.command.impl;
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.exception.CommandFailException;
|
import dev.plex.command.exception.CommandFailException;
|
||||||
|
import dev.plex.command.exception.PlayerNotFoundException;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -15,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.unfreeze")
|
@CommandPermissions(permission = "plex.unfreeze")
|
||||||
@CommandParameters(name = "unfreeze", description = "Unfreeze a player", usage = "/<command> <player>")
|
@CommandParameters(name = "unfreeze", description = "Unfreeze a player", usage = "/<command> <player>")
|
||||||
public class UnfreezeCMD extends PlexCommand
|
public class UnfreezeCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -26,20 +28,28 @@ public class UnfreezeCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
Player player = getNonNullPlayer(args[0]);
|
PlexPlayer punishedPlayer = DataUtils.getPlayer(args[0]);
|
||||||
PlexPlayer punishedPlayer = getOfflinePlexPlayer(player.getUniqueId());
|
if (punishedPlayer == null)
|
||||||
|
{
|
||||||
|
throw new PlayerNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
if (!punishedPlayer.isFrozen())
|
if (!punishedPlayer.isFrozen())
|
||||||
{
|
{
|
||||||
throw new CommandFailException(PlexUtils.messageString("playerNotFrozen"));
|
throw new CommandFailException(PlexUtils.messageString("playerNotFrozen"));
|
||||||
}
|
}
|
||||||
punishedPlayer.setFrozen(false);
|
punishedPlayer.setFrozen(false);
|
||||||
PlexUtils.broadcast(messageComponent("unfrozePlayer", sender.getName(), player.getName()));
|
punishedPlayer.getPunishments().stream().filter(punishment -> punishment.getType() == PunishmentType.FREEZE && punishment.isActive()).forEach(punishment -> {
|
||||||
|
punishment.setActive(false);
|
||||||
|
plugin.getSqlPunishment().updatePunishment(punishment.getType(), false, punishment.getPunished());
|
||||||
|
});
|
||||||
|
PlexUtils.broadcast(messageComponent("unfrozePlayer", sender.getName(), punishedPlayer.getName()));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.unfreeze") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
package dev.plex.command.impl;
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.exception.CommandFailException;
|
import dev.plex.command.exception.CommandFailException;
|
||||||
|
import dev.plex.command.exception.PlayerNotFoundException;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -15,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.unmute")
|
@CommandPermissions(permission = "plex.unmute")
|
||||||
@CommandParameters(name = "unmute", description = "Unmute a player", usage = "/<command> <player>")
|
@CommandParameters(name = "unmute", description = "Unmute a player", usage = "/<command> <player>")
|
||||||
public class UnmuteCMD extends PlexCommand
|
public class UnmuteCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@ -26,20 +28,28 @@ public class UnmuteCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
Player player = getNonNullPlayer(args[0]);
|
PlexPlayer punishedPlayer = DataUtils.getPlayer(args[0]);
|
||||||
PlexPlayer punishedPlayer = getOfflinePlexPlayer(player.getUniqueId());
|
if (punishedPlayer == null)
|
||||||
|
{
|
||||||
|
throw new PlayerNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
if (!punishedPlayer.isMuted())
|
if (!punishedPlayer.isMuted())
|
||||||
{
|
{
|
||||||
throw new CommandFailException(PlexUtils.messageString("playerNotMuted"));
|
throw new CommandFailException(PlexUtils.messageString("playerNotMuted"));
|
||||||
}
|
}
|
||||||
punishedPlayer.setMuted(false);
|
punishedPlayer.setMuted(false);
|
||||||
PlexUtils.broadcast(messageComponent("unmutedPlayer", sender.getName(), player.getName()));
|
punishedPlayer.getPunishments().stream().filter(punishment -> punishment.getType() == PunishmentType.MUTE && punishment.isActive()).forEach(punishment -> {
|
||||||
|
punishment.setActive(false);
|
||||||
|
plugin.getSqlPunishment().updatePunishment(punishment.getType(), false, punishment.getPunished());
|
||||||
|
});
|
||||||
|
PlexUtils.broadcast(messageComponent("unmutedPlayer", sender.getName(), punishedPlayer.getName()));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
return args.length == 1 && checkTab(sender, Rank.ADMIN, "plex.unfreeze") ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
78
server/src/main/java/dev/plex/command/impl/WhoHasCMD.java
Normal file
78
server/src/main/java/dev/plex/command/impl/WhoHasCMD.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import dev.plex.command.PlexCommand;
|
||||||
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.JoinConfiguration;
|
||||||
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "plex.whohas")
|
||||||
|
@CommandParameters(name = "whohas", description = "Returns a list of players with a specific item in their inventory.", usage = "/<command> <material>", aliases = "wh")
|
||||||
|
public class WhoHasCMD extends PlexCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, @NotNull String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
final Material material = Material.getMaterial(args[0].toUpperCase());
|
||||||
|
|
||||||
|
if (material == null)
|
||||||
|
{
|
||||||
|
return messageComponent("materialNotFound", args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean clearInventory = args.length > 1 && args[1].equalsIgnoreCase("clear");
|
||||||
|
|
||||||
|
if (clearInventory && !sender.hasPermission("plex.whohas.clear"))
|
||||||
|
{
|
||||||
|
return messageComponent("noPermissionNode", "plex.whohas.clear");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TextComponent> players = Bukkit.getOnlinePlayers().stream().filter(player ->
|
||||||
|
player.getInventory().contains(material)).map(player -> {
|
||||||
|
if (clearInventory)
|
||||||
|
{
|
||||||
|
player.getInventory().remove(material);
|
||||||
|
player.updateInventory();
|
||||||
|
}
|
||||||
|
return Component.text(player.getName());
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
return players.isEmpty() ?
|
||||||
|
messageComponent("nobodyHasThatMaterial") :
|
||||||
|
(clearInventory ?
|
||||||
|
messageComponent("playersMaterialCleared", Component.text(material.name()),
|
||||||
|
Component.join(JoinConfiguration.commas(true), players)) :
|
||||||
|
messageComponent("playersWithMaterial", Component.text(material.name()),
|
||||||
|
Component.join(JoinConfiguration.commas(true), players)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (args.length == 1 && silentCheckPermission(sender, this.getPermission()))
|
||||||
|
{
|
||||||
|
return Arrays.stream(Material.values()).map(Enum::name).toList();
|
||||||
|
}
|
||||||
|
else if (args.length == 2 && silentCheckPermission(sender, "plex.whohas.clear"))
|
||||||
|
{
|
||||||
|
return Collections.singletonList("clear");
|
||||||
|
}
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
@ -1,26 +1,28 @@
|
|||||||
package dev.plex.command.impl;
|
package dev.plex.command.impl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.Lists;
|
||||||
|
import dev.plex.Plex;
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.CommandParameters;
|
import dev.plex.command.annotation.CommandParameters;
|
||||||
import dev.plex.command.annotation.CommandPermissions;
|
import dev.plex.command.annotation.CommandPermissions;
|
||||||
import dev.plex.command.source.RequiredCommandSource;
|
import dev.plex.command.source.RequiredCommandSource;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.UUID;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.world", source = RequiredCommandSource.IN_GAME)
|
@CommandPermissions(permission = "plex.world", source = RequiredCommandSource.IN_GAME)
|
||||||
@CommandParameters(name = "world", description = "Teleport to a world.", usage = "/<command> <world>")
|
@CommandParameters(name = "world", description = "Teleport to a world.", usage = "/<command> <world>")
|
||||||
public class WorldCMD extends PlexCommand
|
public class WorldCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
|
private static final Pattern UUID_PATTERN = Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args)
|
||||||
{
|
{
|
||||||
@ -29,18 +31,44 @@ public class WorldCMD extends PlexCommand
|
|||||||
{
|
{
|
||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
World world = getNonNullWorld(args[0]);
|
World world = getNonNullWorld(args[0]);
|
||||||
playerSender.teleportAsync(new Location(world, 0, world.getHighestBlockYAt(0, 0) + 1, 0, 0, 0));
|
boolean playerWorld = args[0].matches("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}");
|
||||||
|
if (playerWorld && Plex.get().getModuleManager().getModules().stream().anyMatch(plexModule -> plexModule.getPlexModuleFile().getName().equalsIgnoreCase("Module-TFMExtras")))
|
||||||
|
{
|
||||||
|
checkPermission(playerSender, "plex.world.playerworlds");
|
||||||
|
}
|
||||||
|
playerSender.teleportAsync(world.getSpawnLocation());
|
||||||
return messageComponent("playerWorldTeleport", world.getName());
|
return messageComponent("playerWorldTeleport", world.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
if (args.length == 1)
|
final List<String> completions = Lists.newArrayList();
|
||||||
|
final Player player = (Player) sender;
|
||||||
|
if (args.length == 1 && silentCheckPermission(sender, this.getPermission()))
|
||||||
{
|
{
|
||||||
return Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList());
|
@NotNull List<World> worlds = Bukkit.getWorlds();
|
||||||
}
|
for (World world : worlds)
|
||||||
return ImmutableList.of();
|
{
|
||||||
|
String worldName = world.getName();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
final UUID uuid = UUID.fromString(worldName);
|
||||||
|
if (uuid.equals(player.getUniqueId()) || silentCheckPermission(player, "plex.world.playerworlds"))
|
||||||
|
{
|
||||||
|
completions.add(worldName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
completions.add(worldName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return completions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package dev.plex.event;
|
|
||||||
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.event.Event;
|
|
||||||
import org.bukkit.event.HandlerList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Event that is run when a player is added to the admin list
|
|
||||||
*/
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
|
||||||
@Data
|
|
||||||
public class AdminAddEvent extends Event
|
|
||||||
{
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The sender who added the player
|
|
||||||
*/
|
|
||||||
private final CommandSender sender;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The PlexPlayer that was added
|
|
||||||
*/
|
|
||||||
private final PlexPlayer plexPlayer;
|
|
||||||
|
|
||||||
public static HandlerList getHandlerList()
|
|
||||||
{
|
|
||||||
return handlers;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HandlerList getHandlers()
|
|
||||||
{
|
|
||||||
return handlers;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
package dev.plex.event;
|
|
||||||
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.event.Event;
|
|
||||||
import org.bukkit.event.HandlerList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Event that is run when a player is removed from the admin list
|
|
||||||
*/
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
|
||||||
@Data
|
|
||||||
public class AdminRemoveEvent extends Event
|
|
||||||
{
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The sender who added the player
|
|
||||||
*/
|
|
||||||
private final CommandSender sender;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The PlexPlayer that was removed
|
|
||||||
*/
|
|
||||||
private final PlexPlayer plexPlayer;
|
|
||||||
|
|
||||||
public static HandlerList getHandlerList()
|
|
||||||
{
|
|
||||||
return handlers;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HandlerList getHandlers()
|
|
||||||
{
|
|
||||||
return handlers;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
package dev.plex.event;
|
|
||||||
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.event.Event;
|
|
||||||
import org.bukkit.event.HandlerList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Event that is run when an admins rank is set
|
|
||||||
*/
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
|
||||||
@Data
|
|
||||||
public class AdminSetRankEvent extends Event
|
|
||||||
{
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The sender who added the player
|
|
||||||
*/
|
|
||||||
private final CommandSender sender;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The PlexPlayer that was removed
|
|
||||||
*/
|
|
||||||
private final PlexPlayer plexPlayer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The rank the player was set to
|
|
||||||
*/
|
|
||||||
private final Rank rank;
|
|
||||||
|
|
||||||
public static HandlerList getHandlerList()
|
|
||||||
{
|
|
||||||
return handlers;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HandlerList getHandlers()
|
|
||||||
{
|
|
||||||
return handlers;
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,9 +3,10 @@ package dev.plex.handlers;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import dev.plex.PlexBase;
|
import dev.plex.PlexBase;
|
||||||
import dev.plex.command.PlexCommand;
|
import dev.plex.command.PlexCommand;
|
||||||
import dev.plex.command.annotation.System;
|
import dev.plex.command.impl.DebugCMD;
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.ReflectionsUtil;
|
import dev.plex.util.ReflectionsUtil;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -21,19 +22,10 @@ public class CommandHandler implements PlexBase
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (clazz.isAnnotationPresent(System.class))
|
if (plugin.config.getBoolean("debug") && DebugCMD.class.isAssignableFrom(clazz))
|
||||||
{
|
|
||||||
System annotation = clazz.getDeclaredAnnotation(System.class);
|
|
||||||
if (annotation.value().equalsIgnoreCase(plugin.getSystem().toLowerCase()))
|
|
||||||
{
|
{
|
||||||
commands.add(clazz.getConstructor().newInstance());
|
commands.add(clazz.getConstructor().newInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.config.getBoolean("debug") && annotation.debug())
|
|
||||||
{
|
|
||||||
commands.add(clazz.getConstructor().newInstance());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
commands.add(clazz.getConstructor().newInstance());
|
commands.add(clazz.getConstructor().newInstance());
|
||||||
|
@ -6,6 +6,7 @@ import dev.plex.listener.PlexListener;
|
|||||||
import dev.plex.listener.annotation.Toggleable;
|
import dev.plex.listener.annotation.Toggleable;
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.ReflectionsUtil;
|
import dev.plex.util.ReflectionsUtil;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
52
server/src/main/java/dev/plex/hook/CoreProtectHook.java
Normal file
52
server/src/main/java/dev/plex/hook/CoreProtectHook.java
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package dev.plex.hook;
|
||||||
|
|
||||||
|
import dev.plex.Plex;
|
||||||
|
import dev.plex.util.PlexLog;
|
||||||
|
import net.coreprotect.CoreProtect;
|
||||||
|
import net.coreprotect.CoreProtectAPI;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
public class CoreProtectHook
|
||||||
|
{
|
||||||
|
private CoreProtectAPI coreProtectAPI;
|
||||||
|
private boolean hasApi;
|
||||||
|
|
||||||
|
public CoreProtectHook(Plex plex)
|
||||||
|
{
|
||||||
|
Plugin plugin = plex.getServer().getPluginManager().getPlugin("CoreProtect");
|
||||||
|
|
||||||
|
// Check that CoreProtect is loaded
|
||||||
|
if (!(plugin instanceof CoreProtect))
|
||||||
|
{
|
||||||
|
PlexLog.debug("Plugin was not CoreProtect.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that the API is enabled
|
||||||
|
CoreProtectAPI coreProtectAPI = ((CoreProtect) plugin).getAPI();
|
||||||
|
this.hasApi = coreProtectAPI.isEnabled();
|
||||||
|
if (!hasApi)
|
||||||
|
{
|
||||||
|
PlexLog.debug("CoreProtect API was disabled.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that a compatible version of the API is loaded
|
||||||
|
if (coreProtectAPI.APIVersion() < 9)
|
||||||
|
{
|
||||||
|
PlexLog.debug("CoreProtect API version is: {0}", coreProtectAPI.APIVersion());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.coreProtectAPI = coreProtectAPI;
|
||||||
|
this.coreProtectAPI.testAPI();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasCoreProtect() {
|
||||||
|
return hasApi;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CoreProtectAPI coreProtectAPI()
|
||||||
|
{
|
||||||
|
return coreProtectAPI;
|
||||||
|
}
|
||||||
|
}
|
34
server/src/main/java/dev/plex/hook/PrismHook.java
Normal file
34
server/src/main/java/dev/plex/hook/PrismHook.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package dev.plex.hook;
|
||||||
|
|
||||||
|
import dev.plex.Plex;
|
||||||
|
import network.darkhelmet.prism.api.PrismApi;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
public class PrismHook
|
||||||
|
{
|
||||||
|
private PrismApi prismApi;
|
||||||
|
|
||||||
|
public PrismHook(Plex plex)
|
||||||
|
{
|
||||||
|
Plugin plugin = plex.getServer().getPluginManager().getPlugin("Prism");
|
||||||
|
|
||||||
|
// Check that Prism is loaded
|
||||||
|
if (!plugin.isEnabled())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that the API is enabled
|
||||||
|
this.prismApi = (PrismApi) plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPrism() {
|
||||||
|
return prismApi != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PrismApi prismApi()
|
||||||
|
{
|
||||||
|
return prismApi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,15 @@
|
|||||||
package dev.plex.hook;
|
package dev.plex.hook;
|
||||||
|
|
||||||
|
import dev.plex.player.PlexPlayer;
|
||||||
|
import dev.plex.util.PlexLog;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import dev.plex.util.minimessage.SafeMiniMessage;
|
||||||
|
import java.util.UUID;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import net.milkbowl.vault.chat.Chat;
|
import net.milkbowl.vault.chat.Chat;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
|
|
||||||
public class VaultHook
|
public class VaultHook
|
||||||
@ -46,6 +53,38 @@ public class VaultHook
|
|||||||
return PERMISSIONS;
|
return PERMISSIONS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Component getPrefix(UUID uuid)
|
||||||
|
{
|
||||||
|
return getPrefix(Bukkit.getOfflinePlayer(uuid));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Component getPrefix(PlexPlayer plexPlayer)
|
||||||
|
{
|
||||||
|
return getPrefix(Bukkit.getOfflinePlayer(plexPlayer.getUuid()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Component getPrefix(OfflinePlayer player)
|
||||||
|
{
|
||||||
|
if (VaultHook.getChat() == null || VaultHook.getPermission() == null)
|
||||||
|
{
|
||||||
|
return Component.empty();
|
||||||
|
}
|
||||||
|
if (PlexUtils.DEVELOPERS.contains(player.getUniqueId().toString()))
|
||||||
|
{
|
||||||
|
return PlexUtils.mmDeserialize("<dark_gray>[<dark_purple>Developer<dark_gray>]");
|
||||||
|
}
|
||||||
|
String group = VaultHook.getPermission().getPrimaryGroup(null, player);
|
||||||
|
if (group == null || group.isEmpty()) {
|
||||||
|
return Component.empty();
|
||||||
|
}
|
||||||
|
String vaultPrefix = VaultHook.getChat().getGroupPrefix((String) null, group);
|
||||||
|
if (vaultPrefix == null || vaultPrefix.isEmpty()) {
|
||||||
|
return Component.empty();
|
||||||
|
}
|
||||||
|
PlexLog.debug("prefix: {0}", SafeMiniMessage.mmSerializeWithoutEvents(PlexUtils.stringToComponent(vaultPrefix)).replace("<", "\\<"));
|
||||||
|
return PlexUtils.stringToComponent(vaultPrefix);
|
||||||
|
}
|
||||||
|
|
||||||
public static Permission getPermission()
|
public static Permission getPermission()
|
||||||
{
|
{
|
||||||
return PERMISSIONS;
|
return PERMISSIONS;
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
package dev.plex.listener.impl;
|
|
||||||
|
|
||||||
import dev.plex.cache.DataUtils;
|
|
||||||
import dev.plex.event.AdminAddEvent;
|
|
||||||
import dev.plex.event.AdminRemoveEvent;
|
|
||||||
import dev.plex.event.AdminSetRankEvent;
|
|
||||||
import dev.plex.listener.PlexListener;
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import static dev.plex.util.PlexUtils.messageComponent;
|
|
||||||
|
|
||||||
public class AdminListener extends PlexListener
|
|
||||||
{
|
|
||||||
@EventHandler
|
|
||||||
public void onAdminAdd(AdminAddEvent event)
|
|
||||||
{
|
|
||||||
String userSender = event.getSender().getName();
|
|
||||||
PlexPlayer target = (PlexPlayer)event.getPlexPlayer();
|
|
||||||
if (target.getRankFromString().isAtLeast(Rank.ADMIN))
|
|
||||||
{
|
|
||||||
PlexUtils.broadcast(messageComponent("adminReadded", userSender, target.getName(), target.getRankFromString().getReadable()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
target.setRank(Rank.ADMIN.name());
|
|
||||||
PlexUtils.broadcast(messageComponent("newAdminAdded", userSender, target.getName()));
|
|
||||||
}
|
|
||||||
target.setAdminActive(true);
|
|
||||||
DataUtils.update(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onAdminRemove(AdminRemoveEvent event)
|
|
||||||
{
|
|
||||||
String userSender = event.getSender().getName();
|
|
||||||
PlexPlayer target = (PlexPlayer)event.getPlexPlayer();
|
|
||||||
target.setAdminActive(false);
|
|
||||||
DataUtils.update(target);
|
|
||||||
PlexUtils.broadcast(messageComponent("adminRemoved", userSender, target.getName()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onAdminSetRank(AdminSetRankEvent event)
|
|
||||||
{
|
|
||||||
String userSender = event.getSender().getName();
|
|
||||||
PlexPlayer target = (PlexPlayer)event.getPlexPlayer();
|
|
||||||
Rank newRank = (Rank)event.getRank();
|
|
||||||
target.setRank(newRank.name().toLowerCase());
|
|
||||||
DataUtils.update(target);
|
|
||||||
PlexUtils.broadcast(messageComponent("adminSetRank", userSender, target.getName(), newRank.getReadable()));
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,8 +2,8 @@ package dev.plex.listener.impl;
|
|||||||
|
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.services.impl.TimingService;
|
import dev.plex.services.impl.TimingService;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
@ -18,7 +18,7 @@ public class AntiNukerListener extends PlexListener
|
|||||||
if (getCount(event.getPlayer().getUniqueId()) > 200L)
|
if (getCount(event.getPlayer().getUniqueId()) > 200L)
|
||||||
{
|
{
|
||||||
TimingService.strikes.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
TimingService.strikes.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
||||||
event.getPlayer().kick(Component.text("Please turn off your nuker!"));
|
event.getPlayer().kick(PlexUtils.messageComponent("nukerKickMessage"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ public class AntiNukerListener extends PlexListener
|
|||||||
if (getCount(event.getPlayer().getUniqueId()) > 200L)
|
if (getCount(event.getPlayer().getUniqueId()) > 200L)
|
||||||
{
|
{
|
||||||
TimingService.strikes.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
TimingService.strikes.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
||||||
event.getPlayer().kick(Component.text("Please turn off your nuker!"));
|
event.getPlayer().kick(PlexUtils.messageComponent("nukerKickMessage"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,9 @@ package dev.plex.listener.impl;
|
|||||||
|
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.services.impl.TimingService;
|
import dev.plex.services.impl.TimingService;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
import io.papermc.paper.event.player.AsyncChatEvent;
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
@ -18,7 +17,7 @@ public class AntiSpamListener extends PlexListener
|
|||||||
TimingService.spamCooldown.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
TimingService.spamCooldown.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
||||||
if (getCount(event.getPlayer().getUniqueId()) > 8L)
|
if (getCount(event.getPlayer().getUniqueId()) > 8L)
|
||||||
{
|
{
|
||||||
event.getPlayer().sendMessage(Component.text("Please refrain from spamming messages.").color(NamedTextColor.GRAY));
|
event.getPlayer().sendMessage(PlexUtils.messageComponent("antiSpamMessage"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,7 +28,7 @@ public class AntiSpamListener extends PlexListener
|
|||||||
TimingService.spamCooldown.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
TimingService.spamCooldown.merge(event.getPlayer().getUniqueId(), 1L, Long::sum);
|
||||||
if (getCount(event.getPlayer().getUniqueId()) > 8L)
|
if (getCount(event.getPlayer().getUniqueId()) > 8L)
|
||||||
{
|
{
|
||||||
event.getPlayer().sendMessage(Component.text("Please refrain from spamming commands.").color(NamedTextColor.GRAY));
|
event.getPlayer().sendMessage(PlexUtils.messageComponent("antiSpamMessage"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
package dev.plex.listener.impl;
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
|
import dev.plex.Plex;
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.punishment.Punishment;
|
import dev.plex.punishment.Punishment;
|
||||||
|
import dev.plex.punishment.PunishmentManager;
|
||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
|
import dev.plex.util.PlexLog;
|
||||||
|
import it.unimi.dsi.fastutil.Pair;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
|
|
||||||
@ -13,33 +18,53 @@ public class BanListener extends PlexListener
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPreLogin(AsyncPlayerPreLoginEvent event)
|
public void onPreLogin(AsyncPlayerPreLoginEvent event)
|
||||||
{
|
{
|
||||||
if (plugin.getPunishmentManager().isIndefUUIDBanned(event.getUniqueId()))
|
final PunishmentManager.IndefiniteBan uuidBan = plugin.getPunishmentManager().getIndefiniteBanByUUID(event.getUniqueId());
|
||||||
|
if (uuidBan != null)
|
||||||
{
|
{
|
||||||
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
||||||
Punishment.generateIndefBanMessage("UUID"));
|
!uuidBan.getReason().isEmpty() ? Punishment.generateIndefBanMessageWithReason("UUID", uuidBan.getReason()) : Punishment.generateIndefBanMessage("UUID"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.getPunishmentManager().isIndefIPBanned(event.getAddress().getHostAddress()))
|
final PunishmentManager.IndefiniteBan ipBan = plugin.getPunishmentManager().getIndefiniteBanByIP(event.getAddress().getHostAddress());
|
||||||
|
if (ipBan != null)
|
||||||
{
|
{
|
||||||
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
||||||
Punishment.generateIndefBanMessage("IP"));
|
!ipBan.getReason().isEmpty() ? Punishment.generateIndefBanMessageWithReason("IP", ipBan.getReason()) : Punishment.generateIndefBanMessage("IP"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.getPunishmentManager().isIndefUserBanned(event.getName()))
|
final PunishmentManager.IndefiniteBan userBan = plugin.getPunishmentManager().getIndefiniteBanByUsername(event.getName());
|
||||||
|
|
||||||
|
if (userBan != null)
|
||||||
{
|
{
|
||||||
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
||||||
Punishment.generateIndefBanMessage("username"));
|
!userBan.getReason().isEmpty() ? Punishment.generateIndefBanMessageWithReason("username", userBan.getReason()) : Punishment.generateIndefBanMessage("username"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.getPunishmentManager().isBanned(event.getUniqueId()))
|
if (plugin.getPunishmentManager().isBanned(event.getUniqueId()))
|
||||||
{
|
{
|
||||||
|
if (Plex.get().getPermissions() != null && Plex.get().getPermissions().playerHas(null, Bukkit.getOfflinePlayer(event.getUniqueId()), "plex.ban.bypass"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
PlexPlayer player = DataUtils.getPlayer(event.getUniqueId());
|
PlexPlayer player = DataUtils.getPlayer(event.getUniqueId());
|
||||||
player.getPunishments().stream().filter(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive()).findFirst().ifPresent(punishment ->
|
player.getPunishments().stream().filter(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive()).findFirst().ifPresent(punishment ->
|
||||||
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
||||||
Punishment.generateBanMessage(punishment)));
|
Punishment.generateBanMessage(punishment)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Punishment ipBannedPunishment = plugin.getPunishmentManager().getBanByIP(event.getAddress().getHostAddress());
|
||||||
|
if (ipBannedPunishment != null)
|
||||||
|
{
|
||||||
|
// Don't check if the other account that's banned has bypass abilities, check if current has only
|
||||||
|
if (Plex.get().getPermissions() != null && Plex.get().getPermissions().playerHas(null, Bukkit.getOfflinePlayer(event.getUniqueId()), "plex.ban.bypass"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
|
||||||
|
Punishment.generateBanMessage(ipBannedPunishment));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -86,7 +86,6 @@ public class BlockListener extends PlexListener
|
|||||||
if (blockedPlayers.contains(event.getPlayer().getName()))
|
if (blockedPlayers.contains(event.getPlayer().getName()))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,17 +3,18 @@ package dev.plex.listener.impl;
|
|||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.minimessage.SafeMiniMessage;
|
import dev.plex.util.minimessage.SafeMiniMessage;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.player.PlayerEditBookEvent;
|
import org.bukkit.event.player.PlayerEditBookEvent;
|
||||||
import org.bukkit.inventory.meta.BookMeta;
|
import org.bukkit.inventory.meta.BookMeta;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class BookListener extends PlexListener
|
public class BookListener extends PlexListener
|
||||||
{
|
{
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onBookEdit(PlayerEditBookEvent event)
|
public void onBookEdit(PlayerEditBookEvent event)
|
||||||
{
|
{
|
||||||
List<Component> pages = new ArrayList<>();
|
List<Component> pages = new ArrayList<>();
|
||||||
|
@ -1,15 +1,20 @@
|
|||||||
package dev.plex.listener.impl;
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
|
import dev.plex.hook.VaultHook;
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.listener.annotation.Toggleable;
|
import dev.plex.listener.annotation.Toggleable;
|
||||||
|
import dev.plex.meta.PlayerMeta;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.minimessage.SafeMiniMessage;
|
import dev.plex.util.minimessage.SafeMiniMessage;
|
||||||
import dev.plex.util.redis.MessageUtil;
|
import dev.plex.util.redis.MessageUtil;
|
||||||
import io.papermc.paper.chat.ChatRenderer;
|
import io.papermc.paper.chat.ChatRenderer;
|
||||||
import io.papermc.paper.event.player.AsyncChatEvent;
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import net.kyori.adventure.audience.Audience;
|
import net.kyori.adventure.audience.Audience;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextReplacementConfig;
|
import net.kyori.adventure.text.TextReplacementConfig;
|
||||||
@ -17,12 +22,11 @@ import net.kyori.adventure.text.event.ClickEvent;
|
|||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@Toggleable("chat.enabled")
|
@Toggleable("chat.enabled")
|
||||||
public class ChatListener extends PlexListener
|
public class ChatListener extends PlexListener {
|
||||||
{
|
|
||||||
|
|
||||||
public static final TextReplacementConfig URL_REPLACEMENT_CONFIG = TextReplacementConfig
|
public static final TextReplacementConfig URL_REPLACEMENT_CONFIG = TextReplacementConfig
|
||||||
.builder()
|
.builder()
|
||||||
.match("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]")
|
.match("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]")
|
||||||
@ -31,67 +35,70 @@ public class ChatListener extends PlexListener
|
|||||||
.clickEvent(ClickEvent.openUrl(
|
.clickEvent(ClickEvent.openUrl(
|
||||||
matchResult.group()
|
matchResult.group()
|
||||||
))).build();
|
))).build();
|
||||||
|
public static BiConsumer<AsyncChatEvent, PlexPlayer> PRE_RENDERER = ChatListener::defaultChatProcessing;
|
||||||
private final PlexChatRenderer renderer = new PlexChatRenderer();
|
private final PlexChatRenderer renderer = new PlexChatRenderer();
|
||||||
|
|
||||||
@EventHandler
|
private static final Component format = SafeMiniMessage.mmDeserialize(plugin.config.getString("chat.format"));
|
||||||
public void onChat(AsyncChatEvent event)
|
|
||||||
{
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void onChat(AsyncChatEvent event) {
|
||||||
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId());
|
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId());
|
||||||
if (plexPlayer.isStaffChat()) {
|
if (plexPlayer.isStaffChat()) {
|
||||||
MessageUtil.sendStaffChat(event.getPlayer(), event.message(), PlexUtils.adminChat(event.getPlayer().getName(), SafeMiniMessage.mmSerialize(event.message())).toArray(UUID[]::new));
|
String prefix = PlexUtils.mmSerialize(VaultHook.getPrefix(event.getPlayer())); // Don't use PlexPlayer#getPrefix because that returns their custom set prefix and not their group's
|
||||||
plugin.getServer().getConsoleSender().sendMessage(PlexUtils.messageComponent("adminChatFormat", event.getPlayer().getName(), SafeMiniMessage.mmSerialize(event.message())).replaceText(URL_REPLACEMENT_CONFIG));
|
MessageUtil.sendStaffChat(event.getPlayer(), event.message(), PlexUtils.adminChat(event.getPlayer().getName(), prefix, SafeMiniMessage.mmSerialize(event.message())).toArray(UUID[]::new));
|
||||||
|
plugin.getServer().getConsoleSender().sendMessage(PlexUtils.messageComponent("adminChatFormat", event.getPlayer().getName(), prefix, SafeMiniMessage.mmSerialize(event.message().replaceText(URL_REPLACEMENT_CONFIG))));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Component prefix = plugin.getRankManager().getPrefix(plexPlayer);
|
Component prefix = PlayerMeta.getPrefix(plexPlayer);
|
||||||
|
|
||||||
if (prefix != null)
|
if (prefix != null && !prefix.equals(Component.empty()) && !prefix.equals(Component.space())) {
|
||||||
{
|
|
||||||
renderer.hasPrefix = true;
|
renderer.hasPrefix = true;
|
||||||
renderer.prefix = prefix;
|
renderer.prefix = prefix;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
renderer.hasPrefix = false;
|
renderer.hasPrefix = false;
|
||||||
renderer.prefix = null;
|
renderer.prefix = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRE_RENDERER.accept(event, plexPlayer);
|
||||||
|
|
||||||
event.renderer(renderer);
|
event.renderer(renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PlexChatRenderer implements ChatRenderer
|
public static class PlexChatRenderer implements ChatRenderer {
|
||||||
{
|
|
||||||
public boolean hasPrefix;
|
public boolean hasPrefix;
|
||||||
public Component prefix;
|
public Component prefix;
|
||||||
public Supplier<Component> before = null;
|
public Supplier<Component> before = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer)
|
public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer) {
|
||||||
{
|
Component component = format;
|
||||||
String text = PlexUtils.cleanString(PlexUtils.getTextFromComponent(message));
|
|
||||||
|
|
||||||
Component component = Component.empty();
|
if (before != null) {
|
||||||
|
|
||||||
if (before != null)
|
|
||||||
{
|
|
||||||
component = component.append(before.get());
|
component = component.append(before.get());
|
||||||
}
|
}
|
||||||
if (hasPrefix)
|
|
||||||
{
|
// Substitute the prefix from the config
|
||||||
component = component.append(prefix).append(Component.space());
|
if (hasPrefix) {
|
||||||
|
component = component.replaceText(TextReplacementConfig.builder().matchLiteral("{prefix}").replacement(prefix).build());
|
||||||
}
|
}
|
||||||
return component
|
|
||||||
.append(Component.empty())
|
// Substitute the display name from the config
|
||||||
.append(
|
component = component.replaceText(TextReplacementConfig.builder().matchLiteral("{name}")
|
||||||
source.name().equals(sourceDisplayName) ?
|
.replacement(sourceDisplayName).build());
|
||||||
SafeMiniMessage.mmDeserialize(plugin.config.getString("chat.name-color") + SafeMiniMessage.mmSerialize(sourceDisplayName))
|
|
||||||
: SafeMiniMessage.mmDeserialize(plugin.config.getString("chat.name-color")).append(sourceDisplayName)
|
// Substitute the message from the config
|
||||||
)
|
component = component.replaceText(TextReplacementConfig.builder().matchLiteral("{message}").replacement(message).build());
|
||||||
.append(Component.space())
|
|
||||||
.append(Component.text("»").color(NamedTextColor.GRAY))
|
// Fix links not being clickable
|
||||||
.append(Component.space())
|
component = component.replaceText(URL_REPLACEMENT_CONFIG);
|
||||||
.append(SafeMiniMessage.mmDeserializeWithoutEvents(text))
|
|
||||||
.replaceText(URL_REPLACEMENT_CONFIG);
|
return component;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void defaultChatProcessing(AsyncChatEvent event, PlexPlayer plexPlayer) {
|
||||||
|
String text = PlexUtils.getTextFromComponent(event.message());
|
||||||
|
event.message(PlexUtils.stringToComponent(text));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package dev.plex.listener.impl;
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
|
import dev.plex.Plex;
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.command.blocking.BlockedCommand;
|
import dev.plex.command.blocking.BlockedCommand;
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.services.impl.CommandBlockerService;
|
import dev.plex.services.impl.CommandBlockerService;
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -25,7 +25,8 @@ public class CommandListener extends PlexListener
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
|
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
|
||||||
{
|
{
|
||||||
Bukkit.getOnlinePlayers().stream().filter(pl -> {
|
Bukkit.getOnlinePlayers().stream().filter(pl ->
|
||||||
|
{
|
||||||
PlexPlayer player = plugin.getPlayerCache().getPlexPlayer(pl.getUniqueId());
|
PlexPlayer player = plugin.getPlayerCache().getPlexPlayer(pl.getUniqueId());
|
||||||
return player.isCommandSpy() && hasCommandSpy(plugin.getPlayerCache().getPlexPlayer(pl.getUniqueId()));
|
return player.isCommandSpy() && hasCommandSpy(plugin.getPlayerCache().getPlexPlayer(pl.getUniqueId()));
|
||||||
}).forEach(pl ->
|
}).forEach(pl ->
|
||||||
@ -44,6 +45,7 @@ public class CommandListener extends PlexListener
|
|||||||
{
|
{
|
||||||
String command = "/" + event.getMessage().replaceFirst("/", "").trim();
|
String command = "/" + event.getMessage().replaceFirst("/", "").trim();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
if (Plex.get().getPermissions() != null && Plex.get().getPermissions().has(player, "plex.commandblocker.bypass")) return;
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
||||||
String commandName = StringUtils.normalizeSpace(command).split(" ")[0].replaceFirst("/", "");
|
String commandName = StringUtils.normalizeSpace(command).split(" ")[0].replaceFirst("/", "");
|
||||||
String arguments = StringUtils.normalizeSpace(StringUtils.normalizeSpace(command).replace(command.split(" ")[0], ""));
|
String arguments = StringUtils.normalizeSpace(StringUtils.normalizeSpace(command).replace(command.split(" ")[0], ""));
|
||||||
@ -104,7 +106,10 @@ public class CommandListener extends PlexListener
|
|||||||
if (cmdRef.get() != null)
|
if (cmdRef.get() != null)
|
||||||
{
|
{
|
||||||
BlockedCommand cmd = cmdRef.get();
|
BlockedCommand cmd = cmdRef.get();
|
||||||
switch (cmd.getRequiredLevel().toLowerCase(Locale.ROOT))
|
event.setCancelled(true);
|
||||||
|
event.getPlayer().sendMessage(cmd.getMessage());
|
||||||
|
//TODO: Look into removing this or fixing it so they require permissions instead
|
||||||
|
/*switch (cmd.getRequiredLevel().toLowerCase(Locale.ROOT))
|
||||||
{
|
{
|
||||||
case "e" ->
|
case "e" ->
|
||||||
{
|
{
|
||||||
@ -129,20 +134,12 @@ public class CommandListener extends PlexListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
event.getPlayer().sendMessage(cmd.getMessage());
|
event.getPlayer().sendMessage(cmd.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasCommandSpy(PlexPlayer plexPlayer)
|
private boolean hasCommandSpy(PlexPlayer plexPlayer)
|
||||||
{
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
return plexPlayer.isAdminActive();
|
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
{
|
||||||
return plexPlayer.getPlayer().hasPermission("plex.commandspy");
|
return plexPlayer.getPlayer().hasPermission("plex.commandspy");
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
|
import dev.plex.listener.PlexListener;
|
||||||
|
import dev.plex.menu.AbstractMenu;
|
||||||
|
import dev.plex.menu.pagination.PageableMenu;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Taah
|
||||||
|
* @since 7:01 AM [02-09-2023]
|
||||||
|
*/
|
||||||
|
public class MenuListener extends PlexListener
|
||||||
|
{
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void onClick(InventoryClickEvent event)
|
||||||
|
{
|
||||||
|
if (event.getClickedInventory() == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getCurrentItem() == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(event.getWhoClicked() instanceof Player player))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractMenu.INVENTORIES.entrySet().stream().filter(entry -> entry.getKey().equals(event.getView().title()))
|
||||||
|
.findFirst()
|
||||||
|
.ifPresent(entry ->
|
||||||
|
{
|
||||||
|
if (entry.getValue() instanceof PageableMenu.Page page)
|
||||||
|
{
|
||||||
|
final ItemMeta meta = event.getCurrentItem().getItemMeta();
|
||||||
|
if (meta != null && meta.displayName() != null)
|
||||||
|
{
|
||||||
|
if (meta.displayName().equals(PageableMenu.PREVIOUS.getItemMeta().displayName()))
|
||||||
|
{
|
||||||
|
page.parent().currentPage(page.parent().currentPage() - 1);
|
||||||
|
page.parent().open(player, page.parent().currentPage());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (meta.displayName().equals(PageableMenu.NEXT.getItemMeta().displayName()))
|
||||||
|
{
|
||||||
|
page.parent().currentPage(page.parent().currentPage() + 1);
|
||||||
|
page.parent().open(player, page.parent().currentPage());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (meta.displayName().equals(PageableMenu.CLOSE.getItemMeta().displayName()))
|
||||||
|
{
|
||||||
|
player.closeInventory();
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
event.setCancelled(entry.getValue().onClick(event.getView(), event.getClickedInventory(), player, event.getCurrentItem()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -3,9 +3,7 @@ package dev.plex.listener.impl;
|
|||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.util.BlockUtils;
|
import dev.plex.util.BlockUtils;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.Arrays;
|
import org.bukkit.Chunk;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -14,6 +12,8 @@ import org.bukkit.entity.Ageable;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
@ -24,6 +24,10 @@ import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MobListener extends PlexListener
|
public class MobListener extends PlexListener
|
||||||
{
|
{
|
||||||
private static final List<Material> SPAWN_EGGS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SPAWN_EGG")).toList();
|
private static final List<Material> SPAWN_EGGS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SPAWN_EGG")).toList();
|
||||||
@ -32,16 +36,9 @@ public class MobListener extends PlexListener
|
|||||||
{
|
{
|
||||||
EntityType eggType;
|
EntityType eggType;
|
||||||
try
|
try
|
||||||
{
|
|
||||||
if (mat == Material.MOOSHROOM_SPAWN_EGG)
|
|
||||||
{
|
|
||||||
eggType = EntityType.MUSHROOM_COW;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
eggType = EntityType.valueOf(mat.name().substring(0, mat.name().length() - 10));
|
eggType = EntityType.valueOf(mat.name().substring(0, mat.name().length() - 10));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (IllegalArgumentException ignored)
|
catch (IllegalArgumentException ignored)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
@ -52,6 +49,10 @@ public class MobListener extends PlexListener
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onEntitySpawn(EntitySpawnEvent event)
|
public void onEntitySpawn(EntitySpawnEvent event)
|
||||||
{
|
{
|
||||||
|
if (event.isCancelled())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (event.getEntity().getEntitySpawnReason() == CreatureSpawnEvent.SpawnReason.SPAWNER_EGG)
|
if (event.getEntity().getEntitySpawnReason() == CreatureSpawnEvent.SpawnReason.SPAWNER_EGG)
|
||||||
{
|
{
|
||||||
// for the future, we can instead filter and restrict nbt tags right here.
|
// for the future, we can instead filter and restrict nbt tags right here.
|
||||||
@ -67,6 +68,17 @@ public class MobListener extends PlexListener
|
|||||||
Collection<Player> coll = location.getNearbyEntitiesByType(Player.class, 10);
|
Collection<Player> coll = location.getNearbyEntitiesByType(Player.class, 10);
|
||||||
PlexUtils.disabledEffectMultiple(coll.toArray(new Player[coll.size()]), location); // dont let intellij auto correct toArray to an empty array (for efficiency)
|
PlexUtils.disabledEffectMultiple(coll.toArray(new Player[coll.size()]), location); // dont let intellij auto correct toArray to an empty array (for efficiency)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (plugin.config.getBoolean("entity_limit.mob_limit_enabled"))
|
||||||
|
{
|
||||||
|
Location location = event.getLocation();
|
||||||
|
Chunk chunk = location.getChunk();
|
||||||
|
|
||||||
|
if (isEntityLimitReached(chunk, plugin.config.getInt("entity_limit.max_mobs_per_chunk")))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -83,12 +95,17 @@ public class MobListener extends PlexListener
|
|||||||
{
|
{
|
||||||
blockLoc.getWorld().spawnEntity(blockLoc, eggType);
|
blockLoc.getWorld().spawnEntity(blockLoc, eggType);
|
||||||
}
|
}
|
||||||
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onEntityClick(PlayerInteractEntityEvent event)
|
public void onEntityClick(PlayerInteractEntityEvent event)
|
||||||
{
|
{
|
||||||
|
if (event.isCancelled())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
Material handItem = event.getPlayer().getEquipment().getItem(event.getHand()).getType();
|
Material handItem = event.getPlayer().getEquipment().getItem(event.getHand()).getType();
|
||||||
if (event.getRightClicked() instanceof Ageable entity)
|
if (event.getRightClicked() instanceof Ageable entity)
|
||||||
{
|
{
|
||||||
@ -110,6 +127,14 @@ public class MobListener extends PlexListener
|
|||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPlayerInteract(PlayerInteractEvent event)
|
public void onPlayerInteract(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
|
if (event.useItemInHand() == Event.Result.DENY)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.useInteractedBlock() == Event.Result.DENY)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)
|
if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)
|
||||||
{
|
{
|
||||||
if (SPAWN_EGGS.contains(event.getMaterial()))
|
if (SPAWN_EGGS.contains(event.getMaterial()))
|
||||||
@ -125,8 +150,14 @@ public class MobListener extends PlexListener
|
|||||||
{
|
{
|
||||||
clickedBlock.getWorld().spawnEntity(clickedBlock.getLocation().add(event.getBlockFace().getDirection().multiply(0.8)).add(0.5, 0.5, 0.5), eggType);
|
clickedBlock.getWorld().spawnEntity(clickedBlock.getLocation().add(event.getBlockFace().getDirection().multiply(0.8)).add(0.5, 0.5, 0.5), eggType);
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isEntityLimitReached(Chunk chunk, int limit)
|
||||||
|
{
|
||||||
|
return Arrays.stream(chunk.getEntities())
|
||||||
|
.filter(entity -> entity instanceof LivingEntity && !(entity instanceof Player))
|
||||||
|
.count() >= limit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,16 +2,11 @@ package dev.plex.listener.impl;
|
|||||||
|
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
|
import dev.plex.meta.PlayerMeta;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import dev.plex.storage.StorageType;
|
|
||||||
import dev.plex.util.PermissionsUtil;
|
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -21,7 +16,7 @@ import org.bukkit.event.inventory.InventoryCloseEvent;
|
|||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
public class PlayerListener<T> extends PlexListener
|
public class PlayerListener extends PlexListener
|
||||||
{
|
{
|
||||||
// setting up a player's data
|
// setting up a player's data
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
@ -30,23 +25,12 @@ public class PlayerListener<T> extends PlexListener
|
|||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
PlexPlayer plexPlayer;
|
PlexPlayer plexPlayer;
|
||||||
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
player.setOp(true);
|
|
||||||
PlexLog.debug("Automatically opped " + player.getName() + " since ranks are enabled.");
|
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
player.setOp(false);
|
|
||||||
PlexLog.debug("Automatically deopped " + player.getName() + " since ranks are disabled.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DataUtils.hasPlayedBefore(player.getUniqueId()))
|
if (!DataUtils.hasPlayedBefore(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
PlexLog.log("A player with this name has not joined the server before, creating new entry.");
|
PlexLog.log("A player with this name has not joined the server before, creating new entry.");
|
||||||
plexPlayer = new PlexPlayer(player.getUniqueId()); // it doesn't! okay so now create the object
|
plexPlayer = new PlexPlayer(player.getUniqueId()); // it doesn't! okay so now create the object
|
||||||
plexPlayer.setName(player.getName()); // set the name of the player
|
plexPlayer.setName(player.getName()); // set the name of the player
|
||||||
plexPlayer.setIps(Arrays.asList(player.getAddress().getAddress().getHostAddress().trim())); // set the arraylist of ips
|
plexPlayer.setIps(List.of(player.getAddress().getAddress().getHostAddress().trim())); // set the arraylist of ips
|
||||||
DataUtils.insert(plexPlayer); // insert data in some wack db
|
DataUtils.insert(plexPlayer); // insert data in some wack db
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -74,49 +58,28 @@ public class PlayerListener<T> extends PlexListener
|
|||||||
player.openInventory(player.getInventory());
|
player.openInventory(player.getInventory());
|
||||||
}
|
}
|
||||||
|
|
||||||
String loginMessage = plugin.getRankManager().getLoginMessage(plexPlayer);
|
String loginMessage = PlayerMeta.getLoginMessage(plexPlayer);
|
||||||
if (!loginMessage.isEmpty())
|
if (!loginMessage.isEmpty() && !PlayerMeta.isVanished(player))
|
||||||
{
|
{
|
||||||
PlexUtils.broadcast(PlexUtils.mmDeserialize("<aqua>" + player.getName() + " is " + loginMessage));
|
PlexUtils.broadcast(PlexUtils.stringToComponent(loginMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
PermissionsUtil.setupPermissions(player);
|
|
||||||
|
|
||||||
if (plugin.getStorageType() != StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
plexPlayer.loadNotes();
|
plexPlayer.loadNotes();
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.getStorageType() == StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
plexPlayer.loadPunishments();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.getStorageType() != StorageType.MONGODB)
|
|
||||||
{
|
|
||||||
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
||||||
{
|
{
|
||||||
String plural = notes.size() == 1 ? "note." : "notes.";
|
|
||||||
if (!notes.isEmpty())
|
if (!notes.isEmpty())
|
||||||
{
|
{
|
||||||
PlexUtils.broadcastToAdmins(Component.text(plexPlayer.getName() + " has " + notes.size() + " " + plural).color(NamedTextColor.GOLD));
|
PlexUtils.broadcastToAdmins(PlexUtils.messageComponent(notes.size() == 1 ? "playerNoteAlert" : "playerNoteAlertPlural", plexPlayer.getName(), notes.size()), "plex.notes.notify");
|
||||||
PlexUtils.broadcastToAdmins(Component.text("Click to view their " + plural).clickEvent(ClickEvent.runCommand("/notes " + plexPlayer.getName() + " list")).color(NamedTextColor.GOLD));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// saving the player's data
|
// saving the player's data
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onPlayerSave(PlayerQuitEvent event)
|
public void onPlayerSave(PlayerQuitEvent event)
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId()); //get the player because it's literally impossible for them to not have an object
|
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId()); //get the player because it's literally impossible for them to not have an object
|
||||||
|
|
||||||
if (plugin.getRankManager().isAdmin(plexPlayer))
|
|
||||||
{
|
|
||||||
plugin.getAdminList().removeFromCache(plexPlayer.getUuid());
|
|
||||||
}
|
|
||||||
|
|
||||||
DataUtils.update(plexPlayer);
|
DataUtils.update(plexPlayer);
|
||||||
plugin.getPlayerCache().getPlexPlayerMap().remove(event.getPlayer().getUniqueId()); //remove them from cache
|
plugin.getPlayerCache().getPlexPlayerMap().remove(event.getPlayer().getUniqueId()); //remove them from cache
|
||||||
}
|
}
|
||||||
@ -127,7 +90,7 @@ public class PlayerListener<T> extends PlexListener
|
|||||||
PlexPlayer player = DataUtils.getPlayer(event.getPlayer().getUniqueId());
|
PlexPlayer player = DataUtils.getPlayer(event.getPlayer().getUniqueId());
|
||||||
if (player.isLockedUp())
|
if (player.isLockedUp())
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler().runTaskLater(plugin, () -> event.getPlayer().openInventory(event.getInventory()), 1L);
|
Bukkit.getGlobalRegionScheduler().runDelayed(plugin, (scheduledTask) -> event.getPlayer().openInventory(event.getInventory()), 1L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,9 +4,7 @@ import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
|
|||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.RandomUtil;
|
import dev.plex.util.RandomUtil;
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -34,14 +32,15 @@ public class ServerListener extends PlexListener
|
|||||||
{
|
{
|
||||||
event.motd(PlexUtils.mmDeserialize(baseMotd.trim()));
|
event.motd(PlexUtils.mmDeserialize(baseMotd.trim()));
|
||||||
}
|
}
|
||||||
|
/* - Broken on 1.20.6
|
||||||
if (plugin.config.contains("server.sample"))
|
if (plugin.config.contains("server.sample"))
|
||||||
{
|
{
|
||||||
List<String> samples = plugin.config.getStringList("server.sample");
|
List<String> samples = plugin.config.getStringList("server.sample");
|
||||||
if (!samples.isEmpty())
|
if (!samples.isEmpty())
|
||||||
{
|
{
|
||||||
event.getPlayerSample().clear();
|
event.getPlayerSample().clear();
|
||||||
event.getPlayerSample().addAll(samples.stream().map(string -> string.replace("&", "§")).map(Bukkit::createProfile).collect(Collectors.toList()));
|
event.getPlayerSample().addAll(samples.stream().map(string -> string.replace("&", "§")).map(Bukkit::createProfile).toList());
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
package dev.plex.listener.impl;
|
|
||||||
|
|
||||||
import dev.plex.listener.PlexListener;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import dev.plex.util.minimessage.SafeMiniMessage;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.block.SignChangeEvent;
|
|
||||||
|
|
||||||
public class SignListener extends PlexListener
|
|
||||||
{
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onSignEdit(SignChangeEvent event)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < event.lines().size(); i++)
|
|
||||||
{
|
|
||||||
event.line(i, SafeMiniMessage.mmDeserialize(PlexUtils.getTextFromComponent(event.line(i))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +1,12 @@
|
|||||||
package dev.plex.listener.impl;
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
import dev.plex.cache.DataUtils;
|
import dev.plex.cache.DataUtils;
|
||||||
import dev.plex.event.AdminAddEvent;
|
import dev.plex.hook.VaultHook;
|
||||||
import dev.plex.event.AdminRemoveEvent;
|
|
||||||
import dev.plex.event.AdminSetRankEvent;
|
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
|
import dev.plex.meta.PlayerMeta;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
import net.kyori.adventure.text.Component;
|
import dev.plex.util.PlexUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -19,42 +19,6 @@ public class TabListener extends PlexListener
|
|||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
||||||
player.playerListName(Component.text(player.getName()).color(plugin.getRankManager().getColor(plexPlayer)));
|
player.playerListName(PlexUtils.mmDeserialize(PlayerMeta.getColor(plexPlayer) + player.getName()));
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onAdminAdd(AdminAddEvent event)
|
|
||||||
{
|
|
||||||
PlexPlayer plexPlayer = (PlexPlayer)event.getPlexPlayer();
|
|
||||||
Player player = event.getPlexPlayer().getPlayer();
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
player.playerListName(Component.text(player.getName()).color(plugin.getRankManager().getColor(plexPlayer)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onAdminRemove(AdminRemoveEvent event)
|
|
||||||
{
|
|
||||||
PlexPlayer plexPlayer = (PlexPlayer)event.getPlexPlayer();
|
|
||||||
Player player = event.getPlexPlayer().getPlayer();
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
player.playerListName(Component.text(player.getName()).color(plugin.getRankManager().getColor(plexPlayer)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onAdminSetRank(AdminSetRankEvent event)
|
|
||||||
{
|
|
||||||
PlexPlayer plexPlayer = (PlexPlayer)event.getPlexPlayer();
|
|
||||||
Player player = event.getPlexPlayer().getPlayer();
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
player.playerListName(Component.text(player.getName()).color(plugin.getRankManager().getColor(plexPlayer)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,47 @@
|
|||||||
package dev.plex.listener.impl;
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
|
import dev.plex.Plex;
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
|
import io.papermc.paper.event.player.PrePlayerAttackEntityEvent;
|
||||||
|
import java.util.List;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.ThrownPotion;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.block.BlockExplodeEvent;
|
||||||
import org.bukkit.event.block.BlockFromToEvent;
|
import org.bukkit.event.block.BlockFromToEvent;
|
||||||
import org.bukkit.event.block.BlockRedstoneEvent;
|
import org.bukkit.event.block.BlockRedstoneEvent;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||||
|
import org.bukkit.event.entity.PotionSplashEvent;
|
||||||
|
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||||
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
|
import org.bukkit.projectiles.ProjectileSource;
|
||||||
|
|
||||||
public class TogglesListener extends PlexListener
|
public class TogglesListener extends PlexListener
|
||||||
{
|
{
|
||||||
|
List<String> commands = plugin.commands.getStringList("block_on_mute");
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockExplode(ExplosionPrimeEvent event)
|
public void onExplosionPrime(ExplosionPrimeEvent event)
|
||||||
{
|
{
|
||||||
if (!plugin.toggles.getBoolean("explosions"))
|
if (!plugin.toggles.getBoolean("explosions"))
|
||||||
{
|
{
|
||||||
|
event.getEntity().remove();
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onBlockExplode(BlockExplodeEvent event)
|
||||||
|
{
|
||||||
|
if (!plugin.toggles.getBoolean("explosions"))
|
||||||
|
{
|
||||||
|
event.getBlock().breakNaturally();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -24,6 +51,7 @@ public class TogglesListener extends PlexListener
|
|||||||
{
|
{
|
||||||
if (!plugin.toggles.getBoolean("explosions"))
|
if (!plugin.toggles.getBoolean("explosions"))
|
||||||
{
|
{
|
||||||
|
event.getEntity().remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,6 +74,100 @@ public class TogglesListener extends PlexListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onChat(AsyncChatEvent event)
|
||||||
|
{
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (!plugin.toggles.getBoolean("chat") && !Plex.get().getPermissions().has(player, "plex.mute.bypass"))
|
||||||
|
{
|
||||||
|
event.getPlayer().sendMessage(PlexUtils.messageComponent("chatIsOff"));
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onCommand(PlayerCommandPreprocessEvent event)
|
||||||
|
{
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (!plugin.toggles.getBoolean("chat") && !Plex.get().getPermissions().has(player, "plex.mute.bypass"))
|
||||||
|
{
|
||||||
|
String message = event.getMessage();
|
||||||
|
message = message.replaceAll("\\s.*", "").replaceFirst("/", "");
|
||||||
|
if (commands.contains(message.toLowerCase()))
|
||||||
|
{
|
||||||
|
event.getPlayer().sendMessage(PlexUtils.messageComponent("chatIsOff"));
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String command : commands)
|
||||||
|
{
|
||||||
|
Command cmd = Bukkit.getCommandMap().getCommand(command);
|
||||||
|
if (cmd == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (cmd.getAliases().contains(message.toLowerCase()))
|
||||||
|
{
|
||||||
|
event.getPlayer().sendMessage(PlexUtils.messageComponent("chatIsOff"));
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerAttack(PrePlayerAttackEntityEvent event)
|
||||||
|
{
|
||||||
|
if (!plugin.toggles.getBoolean("pvp"))
|
||||||
|
{
|
||||||
|
if (event.getAttacked() instanceof Player)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
event.getPlayer().sendMessage(PlexUtils.messageComponent("pvpDisabled"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPotionSplash(PotionSplashEvent event)
|
||||||
|
{
|
||||||
|
if (!plugin.toggles.getBoolean("pvp"))
|
||||||
|
{
|
||||||
|
ProjectileSource shooter = event.getEntity().getShooter();
|
||||||
|
if (shooter instanceof Player)
|
||||||
|
{
|
||||||
|
ThrownPotion potion = event.getPotion();
|
||||||
|
if (potion.getEffects().stream().anyMatch(effect -> effect.getType().getName().startsWith("HARM") ||
|
||||||
|
effect.getType().getName().startsWith("POISON")) &&
|
||||||
|
event.getAffectedEntities().stream().anyMatch(entity -> entity instanceof Player))
|
||||||
|
{
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
((Player) shooter).sendMessage(PlexUtils.messageComponent("pvpDisabled"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onProjectileHit(ProjectileHitEvent event)
|
||||||
|
{
|
||||||
|
if (!plugin.toggles.getBoolean("pvp"))
|
||||||
|
{
|
||||||
|
ProjectileSource shooter = event.getEntity().getShooter();
|
||||||
|
if (shooter instanceof Player && event.getHitEntity() instanceof Player)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
((Player) shooter).sendMessage(PlexUtils.messageComponent("pvpDisabled"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* I have no idea if this is the best way to do this
|
/* I have no idea if this is the best way to do this
|
||||||
There is a very weird bug where if you try to create a loop using two repeaters and a lever, after disabling
|
There is a very weird bug where if you try to create a loop using two repeaters and a lever, after disabling
|
||||||
and re-enabling redstone, you are unable to recreate the loop with a lever. Using a redstone torch works fine.
|
and re-enabling redstone, you are unable to recreate the loop with a lever. Using a redstone torch works fine.
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
|
import de.myzelyam.api.vanish.PlayerShowEvent;
|
||||||
|
import dev.plex.cache.DataUtils;
|
||||||
|
import dev.plex.listener.PlexListener;
|
||||||
|
import dev.plex.meta.PlayerMeta;
|
||||||
|
import dev.plex.player.PlexPlayer;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
|
||||||
|
public class VanishListener extends PlexListener
|
||||||
|
{
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void onPlayerUnvanish(PlayerShowEvent event)
|
||||||
|
{
|
||||||
|
if (!PlexUtils.hasVanishPlugin())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.isSilent())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PlexPlayer plexPlayer = DataUtils.getPlayer(event.getPlayer().getUniqueId());
|
||||||
|
String loginMessage = PlayerMeta.getLoginMessage(plexPlayer);
|
||||||
|
if (!loginMessage.isEmpty())
|
||||||
|
{
|
||||||
|
PlexUtils.broadcast(PlexUtils.stringToComponent(loginMessage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,20 +1,12 @@
|
|||||||
package dev.plex.listener.impl;
|
package dev.plex.listener.impl;
|
||||||
|
|
||||||
import dev.plex.Plex;
|
|
||||||
import dev.plex.listener.PlexListener;
|
import dev.plex.listener.PlexListener;
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import dev.plex.rank.enums.Rank;
|
|
||||||
import dev.plex.rank.enums.Title;
|
|
||||||
import dev.plex.util.PlexLog;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.data.Openable;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.PluginIdentifiableCommand;
|
import org.bukkit.command.PluginIdentifiableCommand;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
@ -23,16 +15,19 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerItemDamageEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class WorldListener extends PlexListener
|
public class WorldListener extends PlexListener
|
||||||
{
|
{
|
||||||
private final List<String> EDIT_COMMANDS = Arrays.asList("bigtree", "ebigtree", "largetree", "elargetree", "break", "ebreak", "antioch", "nuke", "editsign", "tree", "etree");
|
private final List<String> EDIT_COMMANDS = Arrays.asList("bigtree", "ebigtree", "largetree", "elargetree", "break", "ebreak", "antioch", "nuke", "editsign", "tree", "etree");
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onBlockPlace(BlockPlaceEvent event)
|
public void onBlockPlace(BlockPlaceEvent event)
|
||||||
{
|
{
|
||||||
if (!canModifyWorld(event.getPlayer(), true))
|
if (!canModifyWorld(event.getPlayer(), true))
|
||||||
@ -41,7 +36,7 @@ public class WorldListener extends PlexListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onBlockBreak(BlockBreakEvent event)
|
public void onBlockBreak(BlockBreakEvent event)
|
||||||
{
|
{
|
||||||
if (!canModifyWorld(event.getPlayer(), true))
|
if (!canModifyWorld(event.getPlayer(), true))
|
||||||
@ -50,7 +45,45 @@ public class WorldListener extends PlexListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void onInteractWorld(PlayerInteractEvent event)
|
||||||
|
{
|
||||||
|
if (event.getInteractionPoint() != null && event.getInteractionPoint().getBlock().getBlockData() instanceof Openable) return;
|
||||||
|
if (!canModifyWorld(event.getPlayer(), true))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void onInteractWorld(PlayerInteractEntityEvent event)
|
||||||
|
{
|
||||||
|
if (!canModifyWorld(event.getPlayer(), true))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void onInteractWorld(PlayerItemDamageEvent event)
|
||||||
|
{
|
||||||
|
if (!canModifyWorld(event.getPlayer(), true))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void onInteractWorld(EntityDamageByEntityEvent event)
|
||||||
|
{
|
||||||
|
if (!(event.getDamager() instanceof Player player)) return;
|
||||||
|
if (!canModifyWorld(player, true))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onEntitySpawn(EntitySpawnEvent event)
|
public void onEntitySpawn(EntitySpawnEvent event)
|
||||||
{
|
{
|
||||||
if (event.getEntityType() != EntityType.SLIME)
|
if (event.getEntityType() != EntityType.SLIME)
|
||||||
@ -80,62 +113,22 @@ public class WorldListener extends PlexListener
|
|||||||
boolean isFaweCommand = command instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) command).getPlugin().equals(Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit"));
|
boolean isFaweCommand = command instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) command).getPlugin().equals(Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit"));
|
||||||
if (isWeCommand || isFaweCommand || EDIT_COMMANDS.contains(message.toLowerCase()))
|
if (isWeCommand || isFaweCommand || EDIT_COMMANDS.contains(message.toLowerCase()))
|
||||||
{
|
{
|
||||||
event.getPlayer().sendMessage(Component.text("You do not have permission to use that command in this world.").color(NamedTextColor.RED));
|
String noEdit = plugin.config.getString("worlds." + event.getPlayer().getWorld().getName().toLowerCase() + ".modification.message");
|
||||||
|
event.getPlayer().sendMessage(MiniMessage.miniMessage().deserialize(noEdit));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onWorldTeleport(PlayerTeleportEvent event)
|
public void onWorldTeleport(PlayerTeleportEvent event)
|
||||||
{
|
{
|
||||||
if (!canEnterWorld(event.getPlayer()))
|
if (!canEnterWorld(event.getPlayer(), event.getTo().getWorld()))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkLevel(PlexPlayer player, String[] requiredList)
|
|
||||||
{
|
|
||||||
PlexLog.debug("Checking world required levels " + Arrays.toString(requiredList));
|
|
||||||
boolean hasAccess = false;
|
|
||||||
for (String required : requiredList)
|
|
||||||
{
|
|
||||||
PlexLog.debug("Checking if player has " + required);
|
|
||||||
if (required.startsWith("Title"))
|
|
||||||
{
|
|
||||||
String titleString = required.split("\\.")[1];
|
|
||||||
Title title = Title.valueOf(titleString.toUpperCase(Locale.ROOT));
|
|
||||||
switch (title)
|
|
||||||
{
|
|
||||||
case DEV ->
|
|
||||||
{
|
|
||||||
hasAccess = PlexUtils.DEVELOPERS.contains(player.getUuid().toString());
|
|
||||||
}
|
|
||||||
case MASTER_BUILDER ->
|
|
||||||
{
|
|
||||||
hasAccess = Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(player.getName());
|
|
||||||
}
|
|
||||||
case OWNER ->
|
|
||||||
{
|
|
||||||
hasAccess = Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(player.getName());
|
|
||||||
}
|
|
||||||
default ->
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (required.startsWith("Rank"))
|
|
||||||
{
|
|
||||||
String rankString = required.split("\\.")[1];
|
|
||||||
Rank rank = Rank.valueOf(rankString.toUpperCase(Locale.ROOT));
|
|
||||||
hasAccess = rank.isAtLeast(Rank.ADMIN) ? player.isAdminActive() && player.getRankFromString().isAtLeast(rank) : player.getRankFromString().isAtLeast(rank);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return hasAccess;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a Player has the ability to modify the world they are in
|
* Check if a Player has the ability to modify the world they are in
|
||||||
*
|
*
|
||||||
@ -145,10 +138,7 @@ public class WorldListener extends PlexListener
|
|||||||
*/
|
*/
|
||||||
private boolean canModifyWorld(Player player, boolean showMessage)
|
private boolean canModifyWorld(Player player, boolean showMessage)
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(player.getUniqueId());
|
|
||||||
World world = player.getWorld();
|
World world = player.getWorld();
|
||||||
if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
String permission = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".modification.permission");
|
String permission = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".modification.permission");
|
||||||
if (permission == null)
|
if (permission == null)
|
||||||
{
|
{
|
||||||
@ -158,22 +148,6 @@ public class WorldListener extends PlexListener
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
if (plugin.config.contains("worlds." + world.getName().toLowerCase() + ".modification.requiredLevels"))
|
|
||||||
{
|
|
||||||
@NotNull List<String> requiredLevel = plugin.config.getStringList("worlds." + world.getName().toLowerCase() + ".modification.requiredLevels");
|
|
||||||
if (checkLevel(plexPlayer, requiredLevel.toArray(String[]::new)))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showMessage)
|
if (showMessage)
|
||||||
{
|
{
|
||||||
@ -192,13 +166,9 @@ public class WorldListener extends PlexListener
|
|||||||
* @param player The player who wants to enter the world
|
* @param player The player who wants to enter the world
|
||||||
* @return Returns true if the person has the ability to enter the world
|
* @return Returns true if the person has the ability to enter the world
|
||||||
*/
|
*/
|
||||||
private boolean canEnterWorld(Player player)
|
private boolean canEnterWorld(Player player, World destination)
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(player.getUniqueId());
|
String permission = plugin.config.getString("worlds." + destination.getName().toLowerCase() + ".entry.permission");
|
||||||
World world = player.getWorld();
|
|
||||||
if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
|
||||||
String permission = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".entry.permission");
|
|
||||||
if (permission == null)
|
if (permission == null)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -207,24 +177,8 @@ public class WorldListener extends PlexListener
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
|
||||||
{
|
|
||||||
if (plugin.config.contains("worlds." + world.getName().toLowerCase() + ".entry.requiredLevels"))
|
|
||||||
{
|
|
||||||
@NotNull List<String> requiredLevel = plugin.config.getStringList("worlds." + world.getName().toLowerCase() + ".entry.requiredLevels");
|
|
||||||
if (checkLevel(plexPlayer, requiredLevel.toArray(String[]::new)))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String noEntry = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".entry.message");
|
String noEntry = plugin.config.getString("worlds." + destination.getName().toLowerCase() + ".entry.message");
|
||||||
if (noEntry != null)
|
if (noEntry != null)
|
||||||
{
|
{
|
||||||
player.sendMessage(MiniMessage.miniMessage().deserialize(noEntry));
|
player.sendMessage(MiniMessage.miniMessage().deserialize(noEntry));
|
||||||
|
60
server/src/main/java/dev/plex/menu/AbstractMenu.java
Normal file
60
server/src/main/java/dev/plex/menu/AbstractMenu.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package dev.plex.menu;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import dev.plex.util.minimessage.SafeMiniMessage;
|
||||||
|
import java.util.Map;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryView;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Accessors(fluent = true)
|
||||||
|
public abstract class AbstractMenu
|
||||||
|
{
|
||||||
|
public static final Map<Component, AbstractMenu> INVENTORIES = Maps.newHashMap();
|
||||||
|
private final Component name;
|
||||||
|
private final Inventory inventory;
|
||||||
|
|
||||||
|
public AbstractMenu(Component name, Rows rows)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.inventory = Bukkit.createInventory(null, rows.slots, name);
|
||||||
|
|
||||||
|
INVENTORIES.put(name, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbstractMenu(String name, Rows rows)
|
||||||
|
{
|
||||||
|
this(SafeMiniMessage.mmDeserializeWithoutEvents(name), rows);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract boolean onClick(InventoryView view, Inventory inventory, Player player, ItemStack clicked);
|
||||||
|
|
||||||
|
public void open(Player player)
|
||||||
|
{
|
||||||
|
player.openInventory(this.inventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Rows
|
||||||
|
{
|
||||||
|
ONE(9), TWO(18), THREE(27), FOUR(36), FIVE(45), SIX(54);
|
||||||
|
|
||||||
|
private final int slots;
|
||||||
|
|
||||||
|
Rows(int slots)
|
||||||
|
{
|
||||||
|
this.slots = slots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int slots()
|
||||||
|
{
|
||||||
|
return this.slots;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,193 +0,0 @@
|
|||||||
package dev.plex.menu;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import dev.plex.Plex;
|
|
||||||
import dev.plex.cache.DataUtils;
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import dev.plex.punishment.Punishment;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import dev.plex.util.menu.AbstractMenu;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
|
||||||
|
|
||||||
public class PunishedPlayerMenu extends AbstractMenu
|
|
||||||
{
|
|
||||||
private final PlexPlayer punishedPlayer;
|
|
||||||
|
|
||||||
private final List<Inventory> inventories = Lists.newArrayList();
|
|
||||||
|
|
||||||
public PunishedPlayerMenu(PlexPlayer player)
|
|
||||||
{
|
|
||||||
super("§c§lPunishments");
|
|
||||||
this.punishedPlayer = player;
|
|
||||||
for (int i = 0; i <= punishedPlayer.getPunishments().size() / 53; i++)
|
|
||||||
{
|
|
||||||
Inventory inventory = Bukkit.createInventory(null, 54, PlexUtils.mmDeserialize("Punishments Page " + (i + 1)));
|
|
||||||
ItemStack nextPage = new ItemStack(Material.FEATHER);
|
|
||||||
ItemMeta meta = nextPage.getItemMeta();
|
|
||||||
meta.displayName(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE));
|
|
||||||
nextPage.setItemMeta(meta);
|
|
||||||
|
|
||||||
ItemStack previousPage = new ItemStack(Material.FEATHER);
|
|
||||||
ItemMeta meta2 = previousPage.getItemMeta();
|
|
||||||
meta2.displayName(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE));
|
|
||||||
previousPage.setItemMeta(meta2);
|
|
||||||
|
|
||||||
ItemStack back = new ItemStack(Material.BARRIER);
|
|
||||||
ItemMeta meta3 = back.getItemMeta();
|
|
||||||
meta3.displayName(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE));
|
|
||||||
back.setItemMeta(meta3);
|
|
||||||
|
|
||||||
inventory.setItem(50, nextPage);
|
|
||||||
inventory.setItem(49, back);
|
|
||||||
inventory.setItem(48, previousPage);
|
|
||||||
inventories.add(inventory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Inventory> getInventory()
|
|
||||||
{
|
|
||||||
return inventories;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void openInv(Player player, int index)
|
|
||||||
{
|
|
||||||
int currentItemIndex = 0;
|
|
||||||
int currentInvIndex = 0;
|
|
||||||
for (Punishment punishment : punishedPlayer.getPunishments())
|
|
||||||
{
|
|
||||||
Inventory inv = inventories.get(currentInvIndex);
|
|
||||||
if (currentInvIndex > inventories.size() - 1)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentItemIndex == inv.getSize() - 1)
|
|
||||||
{
|
|
||||||
currentInvIndex++;
|
|
||||||
currentItemIndex = 0;
|
|
||||||
inv = inventories.get(currentInvIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ItemStack item = new ItemStack(Material.NETHER_STAR);
|
|
||||||
ItemMeta meta = item.getItemMeta();
|
|
||||||
meta.displayName(Component.text(punishment.getType().name().toUpperCase()).color(NamedTextColor.RED));
|
|
||||||
meta.lore(Collections.singletonList(Component.text("Reason: ").color(NamedTextColor.YELLOW).append(Component.newline()).append(Component.text(punishment.getReason()).color(NamedTextColor.GRAY))));
|
|
||||||
item.setItemMeta(meta);
|
|
||||||
|
|
||||||
inv.setItem(currentItemIndex, item);
|
|
||||||
|
|
||||||
currentItemIndex++;
|
|
||||||
}
|
|
||||||
player.openInventory(inventories.get(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onClick(InventoryClickEvent event)
|
|
||||||
{
|
|
||||||
if (event.getClickedInventory() == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Inventory inv = event.getClickedInventory();
|
|
||||||
if (!isValidInventory(inv))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.getCurrentItem() == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ItemStack item = event.getCurrentItem();
|
|
||||||
if (!item.hasItemMeta())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!item.getItemMeta().hasDisplayName())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.setCancelled(true);
|
|
||||||
if (item.getType() == Material.FEATHER)
|
|
||||||
{
|
|
||||||
if (item.getItemMeta().displayName().equals(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE)))
|
|
||||||
{
|
|
||||||
if (getCurrentInventoryIndex(inv) + 1 > inventories.size() - 1)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (inventories.get(getCurrentInventoryIndex(inv) + 1).getContents().length == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
openInv((Player)event.getWhoClicked(), getCurrentInventoryIndex(inv) + 1);
|
|
||||||
}
|
|
||||||
else if (item.getItemMeta().displayName().equals(Component.text("Previous Page").color(NamedTextColor.LIGHT_PURPLE)))
|
|
||||||
{
|
|
||||||
if (getCurrentInventoryIndex(inv) - 1 < 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (getCurrentInventoryIndex(inv) - 1 > inventories.size() - 1)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (inventories.get(getCurrentInventoryIndex(inv) - 1).getContents().length == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
openInv((Player)event.getWhoClicked(), getCurrentInventoryIndex(inv) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (item.getType() == Material.BARRIER)
|
|
||||||
{
|
|
||||||
new PunishmentMenu().openInv((Player)event.getWhoClicked(), 0);
|
|
||||||
}
|
|
||||||
else if (item.getType() == Material.PLAYER_HEAD)
|
|
||||||
{
|
|
||||||
SkullMeta meta = (SkullMeta)item.getItemMeta();
|
|
||||||
OfflinePlayer player = meta.getOwningPlayer();
|
|
||||||
assert player != null;
|
|
||||||
PlexPlayer punishedPlayer = DataUtils.getPlayer(player.getUniqueId()) == null ? null : Plex.get().getPlayerCache().getPlexPlayer(player.getUniqueId());
|
|
||||||
if (punishedPlayer == null)
|
|
||||||
{
|
|
||||||
event.getWhoClicked().sendMessage(Component.text("This player does not exist. Try doing /punishments <player> instead.").color(NamedTextColor.RED));
|
|
||||||
event.getWhoClicked().closeInventory();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCurrentInventoryIndex(Inventory inventory)
|
|
||||||
{
|
|
||||||
for (int i = 0; i <= inventories.size() - 1; i++)
|
|
||||||
{
|
|
||||||
if (inventories.get(i).hashCode() == inventory.hashCode())
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isValidInventory(Inventory inventory)
|
|
||||||
{
|
|
||||||
return inventories.contains(inventory);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,178 +0,0 @@
|
|||||||
package dev.plex.menu;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import dev.plex.cache.DataUtils;
|
|
||||||
import dev.plex.player.PlexPlayer;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
import dev.plex.util.menu.AbstractMenu;
|
|
||||||
import java.util.List;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
|
||||||
|
|
||||||
public class PunishmentMenu extends AbstractMenu
|
|
||||||
{
|
|
||||||
|
|
||||||
private final List<Inventory> inventories = Lists.newArrayList();
|
|
||||||
|
|
||||||
public PunishmentMenu()
|
|
||||||
{
|
|
||||||
super("§c§lPunishments");
|
|
||||||
for (int i = 0; i <= Bukkit.getOnlinePlayers().size() / 53; i++)
|
|
||||||
{
|
|
||||||
Inventory inventory = Bukkit.createInventory(null, 54, PlexUtils.mmDeserialize("Punishments Page " + (i + 1)));
|
|
||||||
ItemStack nextPage = new ItemStack(Material.FEATHER);
|
|
||||||
ItemMeta meta = nextPage.getItemMeta();
|
|
||||||
meta.displayName(PlexUtils.mmDeserialize("<light_purple>Next Page"));
|
|
||||||
nextPage.setItemMeta(meta);
|
|
||||||
|
|
||||||
ItemStack previousPage = new ItemStack(Material.FEATHER);
|
|
||||||
ItemMeta meta2 = previousPage.getItemMeta();
|
|
||||||
meta2.displayName(PlexUtils.mmDeserialize("<light_purple>Previous Page"));
|
|
||||||
previousPage.setItemMeta(meta2);
|
|
||||||
|
|
||||||
inventory.setItem(50, nextPage);
|
|
||||||
inventory.setItem(48, previousPage);
|
|
||||||
inventories.add(inventory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Inventory> getInventory()
|
|
||||||
{
|
|
||||||
return inventories;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void openInv(Player player, int index)
|
|
||||||
{
|
|
||||||
int currentItemIndex = 0;
|
|
||||||
int currentInvIndex = 0;
|
|
||||||
for (Player players : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
Inventory inv = inventories.get(currentInvIndex);
|
|
||||||
if (currentInvIndex > inventories.size() - 1)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentItemIndex == inv.getSize() - 1)
|
|
||||||
{
|
|
||||||
currentInvIndex++;
|
|
||||||
currentItemIndex = 0;
|
|
||||||
inv = inventories.get(currentInvIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ItemStack item = new ItemStack(Material.PLAYER_HEAD);
|
|
||||||
SkullMeta meta = (SkullMeta)item.getItemMeta();
|
|
||||||
meta.setOwningPlayer(players);
|
|
||||||
meta.displayName(PlexUtils.mmDeserialize("<!italic><yellow>" + players.getName()));
|
|
||||||
item.setItemMeta(meta);
|
|
||||||
|
|
||||||
inv.setItem(currentItemIndex, item);
|
|
||||||
|
|
||||||
currentItemIndex++;
|
|
||||||
}
|
|
||||||
player.openInventory(inventories.get(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onClick(InventoryClickEvent event)
|
|
||||||
{
|
|
||||||
if (event.getClickedInventory() == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Inventory inv = event.getClickedInventory();
|
|
||||||
if (!isValidInventory(inv))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.getCurrentItem() == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!event.getCurrentItem().hasItemMeta())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!event.getCurrentItem().getItemMeta().hasDisplayName())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ItemStack item = event.getCurrentItem();
|
|
||||||
event.setCancelled(true);
|
|
||||||
if (item.getType() == Material.FEATHER)
|
|
||||||
{
|
|
||||||
if (item.getItemMeta().displayName().equals(PlexUtils.mmDeserialize("<light_purple>Next Page")))
|
|
||||||
{
|
|
||||||
if (getCurrentInventoryIndex(inv) + 1 > inventories.size() - 1)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (inventories.get(getCurrentInventoryIndex(inv) + 1).getContents().length == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
openInv((Player)event.getWhoClicked(), getCurrentInventoryIndex(inv) + 1);
|
|
||||||
}
|
|
||||||
else if (item.getItemMeta().displayName().equals(PlexUtils.mmDeserialize("<light_purple>Previous Page")))
|
|
||||||
{
|
|
||||||
if (getCurrentInventoryIndex(inv) - 1 < 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (getCurrentInventoryIndex(inv) - 1 > inventories.size() - 1)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (inventories.get(getCurrentInventoryIndex(inv) - 1).getContents().length == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
openInv((Player)event.getWhoClicked(), getCurrentInventoryIndex(inv) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (item.getType() == Material.PLAYER_HEAD)
|
|
||||||
{
|
|
||||||
SkullMeta meta = (SkullMeta)item.getItemMeta();
|
|
||||||
OfflinePlayer player = meta.getOwningPlayer();
|
|
||||||
assert player != null;
|
|
||||||
PlexPlayer punishedPlayer = DataUtils.getPlayer(player.getUniqueId());
|
|
||||||
if (punishedPlayer == null)
|
|
||||||
{
|
|
||||||
event.getWhoClicked().sendMessage(Component.text("This player does not exist. Try doing /punishments <player> instead.").color(NamedTextColor.RED));
|
|
||||||
event.getWhoClicked().closeInventory();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
new PunishedPlayerMenu(punishedPlayer).openInv((Player)event.getWhoClicked(), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCurrentInventoryIndex(Inventory inventory)
|
|
||||||
{
|
|
||||||
for (int i = 0; i <= inventories.size() - 1; i++)
|
|
||||||
{
|
|
||||||
if (inventories.get(i).hashCode() == inventory.hashCode())
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isValidInventory(Inventory inventory)
|
|
||||||
{
|
|
||||||
return inventories.contains(inventory);
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user