diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml new file mode 100644 index 0000000..ad2a28b --- /dev/null +++ b/.github/workflows/gradle-publish.yml @@ -0,0 +1,45 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created +# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle + +name: Gradle Package + +on: + release: + types: [created] + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 17 + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'temurin' + server-id: github # Value of the distributionManagement/repository/id field of the pom.xml + settings-path: ${{ github.workspace }} # location for the settings.xml file + + - name: Build with Gradle + uses: gradle/gradle-build-action@4137be6a8bf7d7133955359dbd952c0ca73b1021 + with: + arguments: build + + # The USERNAME and TOKEN need to correspond to the credentials environment variables used in + # the publishing section of your build.gradle + - name: Publish to GitHub Packages + uses: gradle/gradle-build-action@4137be6a8bf7d7133955359dbd952c0ca73b1021 + with: + arguments: publish + env: + USERNAME: ${{ github.actor }} + TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 0000000..a495d9f --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,31 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 17 + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'temurin' + - name: Build with Gradle + uses: gradle/gradle-build-action@4137be6a8bf7d7133955359dbd952c0ca73b1021 + with: + arguments: build diff --git a/.gitignore b/.gitignore index 4788b4b..e99270d 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,6 @@ out/ *.ctxt # Package Files # -*.jar *.war *.nar *.ear @@ -111,3 +110,10 @@ buildNumber.properties # Common working directory run/ + +#gradle +.gradle +*.jar +!gradle/wrapper/gradle-wrapper.jar +build + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..b98748b --- /dev/null +++ b/build.gradle @@ -0,0 +1,75 @@ +plugins { + id "org.jetbrains.kotlin.jvm" version "1.6.10" + id 'java' + id 'java-library' + id 'maven-publish' +} + +group 'igorlink' +version '1.18' + +repositories { + mavenCentral() + maven { + url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' + + content { + includeGroup 'org.bukkit' + includeGroup 'org.spigotmc' + } + } + maven { + url = 'https://papermc.io/repo/repository/maven-public/' + } +} + +jar { + archiveBaseName = 'DonationExecutor' + archiveVersion = '1.0-SNAPSHOT' +} + +dependencies { + implementation fileTree( + dir: 'libs', + include: ['*.jar'] + ) + implementation "org.jetbrains.kotlin:kotlin-stdlib" + + implementation "io.papermc.paper:paper-api:1.18.1-R0.1-SNAPSHOT" + implementation 'io.socket:engine.io-client:2.0.0' + implementation 'io.socket:socket.io-client:2.0.1' + implementation "org.json:json:20190722" + + compileOnly 'org.projectlombok:lombok:1.18.22' + annotationProcessor 'org.projectlombok:lombok:1.18.22' + + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' + testImplementation 'org.jetbrains.kotlin:kotlin-test' +} + +test { + useJUnitPlatform() +} + +publishing { + repositories { + maven { + name = "OSSRH" + url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" + credentials { + username = System.getenv("MAVEN_USERNAME") + password = System.getenv("MAVEN_PASSWORD") + } + } + maven { + name = "GitHubPackages" + def username_github = System.getenv("USERNAME") + url = "https://maven.pkg.github.com/$username_github/DonationExecutor" + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") + } + } + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..29e08e8 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..7454180 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ffed3a2 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..744e882 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MSYS* | MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 7e5181b..0000000 --- a/pom.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - 4.0.0 - - IgorLink - DonationExecutor - 1.0-SNAPSHOT - jar - - DonationExecutor - - Executes donations - - 1.8 - UTF-8 - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - ${java.version} - ${java.version} - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - - package - - shade - - - false - - - - - - - - src/main/resources - true - - - - - - - mvnrepo-repo - https://papermc.io/repo/repository/maven-public/ - - - sonatype - https://oss.sonatype.org/content/groups/public/ - - - - - - io.papermc.paper - paper-api - 1.18.1-R0.1-SNAPSHOT - provided - - - io.socket - engine.io-client - 0.8.3 - - - io.socket - socket.io-client - 0.8.3 - - - org.json - json - 20190722 - - - - - diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..8921d78 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'DonationExecutor' + diff --git a/src/main/java/igorlink/DonationAlerts/DonationAlerts.java b/src/main/java/igorlink/DonationAlerts/DonationAlerts.java index c4ca073..8788f78 100644 --- a/src/main/java/igorlink/DonationAlerts/DonationAlerts.java +++ b/src/main/java/igorlink/DonationAlerts/DonationAlerts.java @@ -2,101 +2,81 @@ import igorlink.donationexecutor.DonationExecutor; import igorlink.donationexecutor.executionsstaff.Donation; -import org.bukkit.Bukkit; -import org.bukkit.scheduler.BukkitRunnable; -import io.socket.emitter.Emitter.Listener; import io.socket.client.IO; import io.socket.client.Socket; +import io.socket.emitter.Emitter.Listener; +import kotlin.Suppress; +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitRunnable; import org.json.JSONException; import org.json.JSONObject; + import java.net.URI; import java.net.URISyntaxException; +import java.util.Objects; + import static igorlink.service.Utils.logToConsole; public class DonationAlerts { - private Listener connectListener; - private Listener disconectListener; - private Listener donationListener; - private Listener errorListener; - private URI url; - private Socket socket; + private final Socket socket; + public DonationAlerts(String apiLink) throws URISyntaxException { - public DonationAlerts(String server) throws URISyntaxException { - - url = new URI(server); + URI url = new URI(apiLink); socket = IO.socket(url); - connectListener = new Listener() { - @Override - public void call(Object... arg0) { - logToConsole("Произведено успешное подключение!"); - } - }; + Listener connectListener = arg0 -> logToConsole("Произведено успешное подключение!"); - disconectListener = new Listener() { - @Override - public void call(Object... arg0) { - logToConsole("Соединение разорвано!"); - } - }; + Listener disconnectListener = arg0 -> logToConsole("Соединение разорвано!"); - donationListener = new Listener() { - @Override - public void call(Object... arg0) { + Listener donationListener = arg0 -> { - JSONObject json = new JSONObject((String) arg0[0]); - json.toString(); - new BukkitRunnable() { - @Override - public void run() { + JSONObject json = new JSONObject((String) arg0[0]); + new BukkitRunnable() { + @Override + public void run() { - if ( (json.isNull("username")) || (json.isNull("amount_formatted"))) { - return; - } + if ((json.isNull("username")) || (json.isNull("amount_formatted"))) { + return; + } - if ((json.getString("amount_formatted")).length() <= 1) { - return; - } + if ((json.getString("amount_formatted")).length() <= 1) { + return; + } - DonationExecutor.getInstance().listOfStreamerPlayers - .addToDonationsQueue(new Donation(Bukkit.getConsoleSender(), - json.getString("username"), - json.getString("amount_formatted"), - json.getString("message"))); + DonationExecutor.getInstance().listOfStreamerPlayers + .addToDonationsQueue(new Donation(Bukkit.getConsoleSender(), + json.getString("username"), + json.getString("amount_formatted"), + json.getString("message"))); - } - }.runTask(Bukkit.getPluginManager().getPlugin("DonationExecutor")); + } + }.runTask(Objects.requireNonNull(Bukkit.getPluginManager().getPlugin("DonationExecutor"))); - } }; - errorListener = new Listener() { - @Override - public void call(Object... arg0) { - logToConsole("Произошла ошибка подключения к Donation Alerts!"); - } - }; + Listener errorListener = arg0 -> logToConsole("Произошла ошибка подключения к Donation Alerts!"); socket.on(Socket.EVENT_CONNECT, connectListener) - .on(Socket.EVENT_DISCONNECT, disconectListener) - .on(Socket.EVENT_ERROR, errorListener) + .on(Socket.EVENT_DISCONNECT, disconnectListener) + .on(Socket.EVENT_CONNECT_ERROR, errorListener) .on("donation", donationListener); } - public void Connect (String token) throws JSONException { + public void connect(String token) throws JSONException { socket.connect(); socket.emit("add-user", new JSONObject() .put("token", token) .put("type", "minor")); } - public void Disconnect() throws JSONException { + public void disconnect() throws JSONException { socket.disconnect(); } + @Suppress(names = "UNUSED") public boolean getConnected() { return socket.connected(); } diff --git a/src/main/java/igorlink/command/AbstractCommand.java b/src/main/java/igorlink/command/AbstractCommand.java index d62bf86..5981ba5 100644 --- a/src/main/java/igorlink/command/AbstractCommand.java +++ b/src/main/java/igorlink/command/AbstractCommand.java @@ -21,10 +21,6 @@ public AbstractCommand(String command) { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - if (execute(sender, label, args)) { - return true; - } else { - return false; - } + return execute(sender, label, args); } } diff --git a/src/main/java/igorlink/command/DonateSubCommand.java b/src/main/java/igorlink/command/DonateSubCommand.java index 3e4c1b3..c604e14 100644 --- a/src/main/java/igorlink/command/DonateSubCommand.java +++ b/src/main/java/igorlink/command/DonateSubCommand.java @@ -9,9 +9,9 @@ public static void onDonateCommand(CommandSender sender, String[] args) { int i; //Getting donation's amount - String donationAmount = new String(); - String donationUsername = new String(); - String donationMessage = new String(); + String donationAmount; + StringBuilder donationUsername = new StringBuilder(); + StringBuilder donationMessage = new StringBuilder(); //Getting donation's amount donationAmount = args[0]; @@ -20,24 +20,23 @@ public static void onDonateCommand(CommandSender sender, String[] args) { for (i = 1; i <= args.length - 1; i++) { if (args[i].equals("##")) { break; - } - else { - if (i==1) { - donationUsername = donationUsername + args[i]; - } - else { - donationUsername = ' ' + donationUsername + args[i]; + } else { + if (i == 1) { + donationUsername.append(args[i]); + } else { + donationUsername = new StringBuilder(' ' + donationUsername.toString() + args[i]); } } } //Все, что после символов ## - это сообщение - for (i = i+1; i <= args.length - 1; i++) - { - donationMessage = donationMessage + args[i] + ' '; + for (i = i + 1; i <= args.length - 1; i++) { + donationMessage.append(args[i]).append(' '); } - //Отправляем донат на исполнение - DonationExecutor.getInstance().listOfStreamerPlayers.addToDonationsQueue(new Donation(sender, donationUsername, donationAmount+".00", donationMessage)); + String amount = donationAmount + ".00"; + + //Отправляем Донат на исполнение + DonationExecutor.getInstance().listOfStreamerPlayers.addToDonationsQueue(new Donation(sender, donationUsername.toString(), amount, donationMessage.toString())); } } diff --git a/src/main/java/igorlink/command/DonationExecutorCommand.java b/src/main/java/igorlink/command/DonationExecutorCommand.java index fae90d7..04380dc 100644 --- a/src/main/java/igorlink/command/DonationExecutorCommand.java +++ b/src/main/java/igorlink/command/DonationExecutorCommand.java @@ -17,52 +17,49 @@ public Boolean execute(CommandSender sender, String label, String[] args) { if (args.length == 0) { return false; } - try { - //Если команда - это reload, где не должно быть доп аргументов, то вызываем функцию релоуда конфига - if (args[0].equals("reload")) { - if (args.length == 1) { - ReloadSubCommand.onReloadCommand(sender); - return true; - } - } else if (args[0].equals("donate")) { - //Инициализируем список аргментов для новой сабфункции - //Если команда - donate, где нужен минимум 1 доп аргумент, создаем новый массив аргументов со смещением 1, и вызываем функцию обработки доната - if (args.length >= 2) { - //Инициализируем список новых аргументов для субкоманды - newArgs = new String[args.length - 1]; - //Создаем новый список аргументов, копируя старый со смещением 1 - System.arraycopy(args, 1, newArgs, 0, args.length - 1); - //Вызываем обработку доната - DonateSubCommand.onDonateCommand(sender, newArgs); - //Возвращаем true, к все прошло успешно - return true; - } - } else if (args[0].equals("filter")) { - if ((args.length == 2) && (args[1].equals("on")) || (args[1].equals("off"))) { - //Инициализируем список новых аргументов для субкоманды - newArgs = new String[args.length - 1]; - //Создаем новый список аргументов, копируя старый со смещением 1 - System.arraycopy(args, 1, newArgs, 0, args.length - 1); - //Вызываем обработку доната - FilterSubCommand.onFilterCommand(sender, newArgs); - //Возвращаем true, к все прошло успешно - return true; - } + switch (args[0]) { + case "reload": + if (args.length == 1) { + ReloadSubCommand.onReloadCommand(sender); + return true; + } + break; + case "donate": + //Инициализируем список аргментов для новой сабфункции + //Если команда - donate, где нужен минимум 1 доп аргумент, создаем новый массив аргументов со смещением 1, и вызываем функцию обработки доната + if (args.length >= 2) { + //Инициализируем список новых аргументов для субкоманды + newArgs = new String[args.length - 1]; + //Создаем новый список аргументов, копируя старый со смещением 1 + System.arraycopy(args, 1, newArgs, 0, args.length - 1); + //Вызываем обработку доната + DonateSubCommand.onDonateCommand(sender, newArgs); + //Возвращаем true, к все прошло успешно + return true; + } + break; + case "filter": + if ((args.length == 2) && (args[1].equals("on")) || (args[1].equals("off"))) { + //Инициализируем список новых аргументов для субкоманды + newArgs = new String[args.length - 1]; + //Создаем новый список аргументов, копируя старый со смещением 1 + System.arraycopy(args, 1, newArgs, 0, args.length - 1); + //Вызываем обработку доната + FilterSubCommand.onFilterCommand(sender, newArgs); + //Возвращаем true, к все прошло успешно + return true; + } + break; } - } catch (Exception e) { - //Если получили exception, сообщаем о нем и выдаем сообщение об ошибке в консоль e.printStackTrace(); logToConsole("Произошла неизвестная ошибка при выполнении команды!"); return false; - } - //Если ничего не выполнилось - в команде была ошибка return false; } - } diff --git a/src/main/java/igorlink/command/FilterSubCommand.java b/src/main/java/igorlink/command/FilterSubCommand.java index b6c8402..66a4c9a 100644 --- a/src/main/java/igorlink/command/FilterSubCommand.java +++ b/src/main/java/igorlink/command/FilterSubCommand.java @@ -5,22 +5,24 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import static org.dark0ghost.configs.Text.RU.FilterSubCommandText.FILTER_OFF_TEXT; +import static org.dark0ghost.configs.Text.RU.FilterSubCommandText.FILTER_ON_TEXT; + public class FilterSubCommand { public static void onFilterCommand(CommandSender sender, String[] args) { - if (args[0].toLowerCase().equals("on")) { + if (args[0].equalsIgnoreCase("on")) { MainConfig.turnFilterOn(); - Utils.logToConsole("Фильтр никнеймов донатеров §bВКЛЮЧЕН"); + Utils.logToConsole(FILTER_ON_TEXT); if (sender instanceof Player) { - Utils.sendSysMsgToPlayer((Player) sender, "Фильтр никнеймов донатеров §bВКЛЮЧЕН"); + Utils.sendSysMsgToPlayer((Player) sender, FILTER_ON_TEXT); } } else { MainConfig.turnFilterOff(); - Utils.logToConsole("Фильтр никнеймов донатеров §bВЫКЛЮЧЕН"); + Utils.logToConsole(FILTER_OFF_TEXT); if (sender instanceof Player) { - Utils.sendSysMsgToPlayer((Player) sender,"Фильтр никнеймов донатеров §bВЫКЛЮЧЕН"); + Utils.sendSysMsgToPlayer((Player) sender, FILTER_OFF_TEXT); } } - } } diff --git a/src/main/java/igorlink/command/ReloadSubCommand.java b/src/main/java/igorlink/command/ReloadSubCommand.java index 5c59c0c..3996b62 100644 --- a/src/main/java/igorlink/command/ReloadSubCommand.java +++ b/src/main/java/igorlink/command/ReloadSubCommand.java @@ -5,12 +5,16 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.util.Objects; + +import static org.dark0ghost.configs.Text.RU.ReloadSubCommandText.UPDATE_SETTINGS_TEXT; + public class ReloadSubCommand { public static void onReloadCommand(CommandSender sender){ MainConfig.loadMainConfig(true); - Utils.logToConsole("Настройки успешно обновлены!"); + Utils.logToConsole(UPDATE_SETTINGS_TEXT); if (sender instanceof Player) { - Utils.sendSysMsgToPlayer(((Player) sender).getPlayer(), "Настройки успешно обновлены!"); + Utils.sendSysMsgToPlayer(Objects.requireNonNull(((Player) sender).getPlayer()), UPDATE_SETTINGS_TEXT); } } } diff --git a/src/main/java/igorlink/donationexecutor/DonationExecutor.java b/src/main/java/igorlink/donationexecutor/DonationExecutor.java index ddca55b..fa8c386 100644 --- a/src/main/java/igorlink/donationexecutor/DonationExecutor.java +++ b/src/main/java/igorlink/donationexecutor/DonationExecutor.java @@ -7,17 +7,19 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import igorlink.DonationAlerts.*; +import org.json.JSONException; + import java.net.URISyntaxException; import static igorlink.service.Utils.*; public final class DonationExecutor extends JavaPlugin { - public static final String DASERVER = "https://socket.donationalerts.ru:443"; + public static final String apiLink = "https://socket.donationalerts.ru:443"; private static DonationExecutor instance; public static DonationAlerts da; public static GiantMobManager giantMobManager; - public static Boolean isRunning = true; + public static Boolean isRunningStatus = true; public ListOfStreamerPlayers listOfStreamerPlayers; @@ -30,35 +32,32 @@ public void onEnable() { if (CheckNameAndToken()) { try { - da = new DonationAlerts(DASERVER); - da.Connect(MainConfig.token); + da = new DonationAlerts(apiLink); + da.connect(MainConfig.token); } catch (URISyntaxException e) { - e.printStackTrace(); + System.err.println(e.getMessage()); } new DonationExecutorCommand(); } - - - Bukkit.getPluginManager().registerEvents(new EventListener(),this); - + Bukkit.getPluginManager().registerEvents(new EventListener(), this); } @Override public void onDisable() { try { - isRunning = false; - da.Disconnect(); + isRunningStatus = false; + da.disconnect(); Thread.sleep(1000); - da = null; - } catch (Exception e) { + } catch (JSONException e) { logToConsole("Какая-то ебаная ошибка, похуй на нее вообще"); + } catch (Exception e){ + logToConsole("Произошла неустановленная ошибка, как такое могло произойти?"); + } finally { + da = null; } } - public static DonationExecutor getInstance() { return instance; } - - } diff --git a/src/main/java/igorlink/donationexecutor/EventListener.java b/src/main/java/igorlink/donationexecutor/EventListener.java index cf0748c..0f793fb 100644 --- a/src/main/java/igorlink/donationexecutor/EventListener.java +++ b/src/main/java/igorlink/donationexecutor/EventListener.java @@ -12,7 +12,7 @@ public class EventListener implements Listener { - private Map projectiles = new HashMap(); + private final Map projectiles = new HashMap<>(); //Отмена горения НКВДшников @EventHandler diff --git a/src/main/java/igorlink/donationexecutor/Executor.java b/src/main/java/igorlink/donationexecutor/Executor.java index 4ff2e9c..f34b618 100644 --- a/src/main/java/igorlink/donationexecutor/Executor.java +++ b/src/main/java/igorlink/donationexecutor/Executor.java @@ -1,42 +1,56 @@ package igorlink.donationexecutor; + +import org.dark0ghost.annotations.MagicConst; import igorlink.service.MainConfig; -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.*; +import kotlin.Suppress; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; import org.bukkit.attribute.Attribute; import org.bukkit.command.CommandSender; import org.bukkit.entity.*; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; import static igorlink.service.Utils.*; -import static java.lang.Math.*; +import static java.lang.Math.random; +import static java.lang.Math.round; import static org.bukkit.Bukkit.getPlayer; +import static org.dark0ghost.configs.Text.RU.ExecutorText.*; public class Executor { - public static String nameOfStreamerPlayer; - public static String nameOfSecondStreamerPlayer; + + private @MagicConst static final int eventOneHealth = 1; + private @MagicConst static final int eventZeroHealth = 1; + private @MagicConst static final double rotateAroundY = 1.5708; + + public @Suppress(names = "UNUSED_PARAMETER") + static String nameOfStreamerPlayer; + public @Suppress(names = "UNUSED_PARAMETER") + static String nameOfSecondStreamerPlayer; public static List executionsList = new ArrayList<>(Arrays.asList("ShitToInventory", "Lesch", "DropActiveItem", "PowerKick", "ClearLastDeathDrop", "SpawnCreeper", "GiveDiamonds", "GiveStackOfDiamonds", "GiveBread", "CallNKVD", "CallStalin", "RandomChange", "TamedBecomesEnemies", "HalfHeart", "BigBoom")); - public static void DoExecute(CommandSender sender, String streamerName, String donationUsername, String fullDonationAmount, String donationMessage, String executionName) { //Если имя донатера не указано - устанавливаем в качестве имени "Кто-то" - String _donationUsername; + @Suppress(names = "UNUSED_PARAMETER") String _donationUsername; if (donationUsername.equals("")) { - _donationUsername = "Кто-то"; + _donationUsername = UNIDENTIFIED_USER_NAME; } else { _donationUsername = donationUsername; } - Boolean canContinue = true; + boolean canContinue = true; //Определяем игрока (если он оффлайн - не выполняем донат и пишем об этом в консоль), а также определяем мир, местоположение и направление игрока Player streamerPlayer = getPlayer(streamerName); if (streamerPlayer == null) { @@ -51,71 +65,37 @@ public static void DoExecute(CommandSender sender, String streamerName, String d } Location streamerPlayerLocation = streamerPlayer.getLocation(); - World world = streamerPlayer.getWorld(); - Vector direction = streamerPlayerLocation.getDirection(); + @Suppress(names = "UNUSED_PARAMETER") World world = streamerPlayer.getWorld(); + @Suppress(names = "UNUSED_PARAMETER") Vector direction = streamerPlayerLocation.getDirection(); //streamerPlayer.sendActionBar(donationMessage); switch (executionName) { - case "ShitToInventory": - shitToInventory(streamerPlayer, donationUsername); - break; - case "Lesch": - lesch(streamerPlayer, donationUsername); - break; - case "DropActiveItem": - dropActiveItem(streamerPlayer, donationUsername); - break; - case "PowerKick": - powerKick(streamerPlayer, donationUsername); - break; - case "ClearLastDeathDrop": - clearLastDeathDrop(streamerPlayer, donationUsername); - break; - case "SpawnCreeper": - spawnCreeper(streamerPlayer, donationUsername); - break; - case "GiveDiamonds": - giveDiamonds(streamerPlayer, donationUsername); - break; - case "GiveStackOfDiamonds": - giveStackOfDiamonds(streamerPlayer, donationUsername); - break; - case "GiveBread": - giveBread(streamerPlayer, donationUsername); - break; - case "CallNKVD": - callNKVD(streamerPlayer, donationUsername); - break; - case "CallStalin": - callStalin(streamerPlayer, donationUsername); - break; - case "RandomChange": - randomChange(streamerPlayer, donationUsername); - break; - case "TamedBecomesEnemies": - tamedBecomesEnemies(streamerPlayer, donationUsername); - break; - case "HalfHeart": - halfHeart(streamerPlayer, donationUsername); - break; - case "BigBoom": - bigBoom(streamerPlayer, donationUsername); - break; + case "ShitToInventory" -> shitToInventory(streamerPlayer, donationUsername); + case "Lesch" -> lesch(streamerPlayer, donationUsername); + case "DropActiveItem" -> dropActiveItem(streamerPlayer, donationUsername); + case "PowerKick" -> powerKick(streamerPlayer, donationUsername); + case "ClearLastDeathDrop" -> clearLastDeathDrop(streamerPlayer, donationUsername); + case "SpawnCreeper" -> spawnCreeper(streamerPlayer, donationUsername); + case "GiveDiamonds" -> giveDiamonds(streamerPlayer, donationUsername); + case "GiveStackOfDiamonds" -> giveStackOfDiamonds(streamerPlayer, donationUsername); + case "GiveBread" -> giveBread(streamerPlayer, donationUsername); + case "CallNKVD" -> callNKVD(streamerPlayer, donationUsername); + case "CallStalin" -> callStalin(streamerPlayer, donationUsername); + case "RandomChange" -> randomChange(streamerPlayer, donationUsername); + case "TamedBecomesEnemies" -> tamedBecomesEnemies(streamerPlayer, donationUsername); + case "HalfHeart" -> halfHeart(streamerPlayer, donationUsername); + case "BigBoom" -> bigBoom(streamerPlayer, donationUsername); } - } - - - - public static void shitToInventory (Player player, String donationUsername) { - announce(donationUsername, "насрал тебе в инвентарь", "насрал в инвентарь", player, true); + public static void shitToInventory(Player player, String donationUsername) { + announce(donationUsername, SHIT_INVENTORY_EVENT_TEXT, SHIT_INVENTORY_EVENT_TEXT, player, true); Material itemType = Material.DIRT; ItemStack itemStack = new ItemStack(itemType, 64); ItemMeta meta = itemStack.getItemMeta(); meta.setDisplayName("§cГОВНО ОТ §f" + donationUsername.toUpperCase()); - meta.setLore(Arrays.asList("§7Это говно ужасно вонюче и занимает много места")); + meta.setLore(List.of(SHIT_INVENTORY_LORE)); itemStack.setItemMeta(meta); for (int i = 0; i < MainConfig.dirtAmount; i++) { @@ -123,130 +103,129 @@ public static void shitToInventory (Player player, String donationUsername) { } } - public static void dropActiveItem (Player player, String donationUsername) { + public static void dropActiveItem(Player player, String donationUsername) { if (player.getEquipment().getItemInMainHand().getType() == Material.AIR) { - announce(donationUsername, "безуспешно пытался выбить у тебя предмет из рук", "безуспешно пытался выбить предмет из рук", player, true); - } else { - announce(donationUsername, "выбил у тебя предмет из рук", "выбил предмет из рук", player, true); - ((HumanEntity) player).dropItem(true); - player.updateInventory(); + announce(donationUsername, FAIL_DROP_EVENT_TEXT, FAIL_DROP_EVENT_TEXT, player, true); + return; } + announce(donationUsername, SUCCESS_DROP_EVENT_TEXT, SUCCESS_DROP_EVENT_TEXT, player, true); + player.dropItem(true); + player.updateInventory(); } - public static void lesch (Player player, String donationUsername) { - announce(donationUsername, "дал тебе леща", "дал леща", player, true); + public static void lesch(Player player, String donationUsername) { + announce(donationUsername, LESH_EVENT_TEXT, LESH_EVENT_TEXT, player, true); Vector direction = player.getLocation().getDirection(); direction.setY(0); direction.normalize(); direction.setY(0.3); player.setVelocity(direction.multiply(0.8)); - if (player.getHealth()>2.0D) { - player.setHealth(player.getHealth()-2); + if (player.getHealth() > 2.0D) { + player.setHealth(player.getHealth() - 2); } else { - player.setHealth(0); + player.setHealth(eventZeroHealth); } - ((org.bukkit.entity.Player) player).playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); } - public static void powerKick (Player player, String donationUsername) { - announce(donationUsername, "дал тебе смачного пинка под зад", "дал смачного пинка под зад", player, true); + public static void powerKick(Player player, String donationUsername) { + announce(donationUsername, KICK_EVENT_TEXT, KICK_EVENT_TEXT, player, true); Vector direction = player.getLocation().getDirection(); direction.setY(0); direction.normalize(); direction.setY(0.5); player.setVelocity(direction.multiply(1.66)); - if (player.getHealth()>3.0D) { - player.setHealth(player.getHealth()-3); + if (player.getHealth() > 3.0D) { + player.setHealth(player.getHealth() - 3); } else { - player.setHealth(0); + player.setHealth(eventZeroHealth); } - ((org.bukkit.entity.Player) player).playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); } - public static void clearLastDeathDrop (Player player, String donationUsername) { + public static void clearLastDeathDrop(Player player, String donationUsername) { //Remove Last Death Dropped Items if (DonationExecutor.getInstance().listOfStreamerPlayers.getStreamerPlayer(player.getName()).removeDeathDrop()) { - announce(donationUsername, "уничтожил твой посмертный дроп...", "уничтожил посмертный дроп", player, true); - } else { - announce(donationUsername, "безуспешно пытался уничтожить твой посмертный дроп...", "безуспешно пытался уничтожить посмертный дроп", player, true); + announce(donationUsername, SUCCESS_CLEAR_DROP_EVENT_TEXT + SPECIAL_END_TEXT, SUCCESS_CLEAR_DROP_EVENT_TEXT, player, true); + return; } + announce(donationUsername, FAIL_CLEAR_DROP_EVENT_TEXT + SPECIAL_END_TEXT, FAIL_CLEAR_DROP_EVENT_TEXT, player, true); } - public static void spawnCreeper (Player player, String donationUsername) { + public static void spawnCreeper(Player player, String donationUsername) { //Spawn Creepers Vector direction = player.getLocation().getDirection(); - announce(donationUsername, "прислал тебе в подарок крипера...", "прислал крипера в подарок", player, true); + announce(donationUsername, SPAWN_CREEPER_EVENT_TEXT + SPECIAL_END_TEXT, SPAWN_CREEPER_EVENT_TEXT, player, true); direction.setY(0); direction.normalize(); player.getWorld().spawnEntity(player.getLocation().clone().subtract(direction.multiply(1)), EntityType.CREEPER); - } - public static void giveDiamonds (Player player, String donationUsername) { + public static void giveDiamonds(Player player, String donationUsername) { //Give some diamonds to the player - announce(donationUsername, "насыпал тебе алмазов!", "насыпал алмазов", player, true); + announce(donationUsername, GIVE_DIAMOND_EVENT_TEXT, GIVE_DIAMOND_EVENT_TEXT, player, true); Material itemType = Material.DIAMOND; ItemStack itemStack = new ItemStack(itemType, MainConfig.diamondsAmount); ItemMeta meta = itemStack.getItemMeta(); meta.setDisplayName("§bАлмаз"); - meta.setLore(Arrays.asList("§7Эти алмазы подарил §f" + donationUsername)); + meta.setLore(List.of("§7Эти алмазы подарил §f" + donationUsername)); itemStack.setItemMeta(meta); - Item diamonds = player.getWorld().dropItemNaturally(player.getLocation(), itemStack); + @Suppress(names = "UNUSED_PARAMETER") Item diamonds = player.getWorld().dropItemNaturally(player.getLocation(), itemStack); } - public static void giveStackOfDiamonds (Player player, String donationUsername) { - announce(donationUsername, "насыпал тебе алмазов!", "насыпал алмазов", player, true); + public static void giveStackOfDiamonds(Player player, String donationUsername) { + announce(donationUsername, GIVE_DIAMOND_EVENT_TEXT, GIVE_DIAMOND_EVENT_TEXT, player, true); Material itemType = Material.DIAMOND; ItemStack itemStack = new ItemStack(itemType, 64); ItemMeta meta = itemStack.getItemMeta(); meta.setDisplayName("§bАлмаз"); - meta.setLore(Arrays.asList("§7Эти алмазы подарил §f" + donationUsername)); + meta.setLore(List.of("§7Эти алмазы подарил §f" + donationUsername)); itemStack.setItemMeta(meta); - Item diamonds = player.getWorld().dropItemNaturally(player.getLocation(), itemStack); + @Suppress(names = "UNUSED_PARAMETER") Item diamonds = player.getWorld().dropItemNaturally(player.getLocation(), itemStack); } - public static void giveBread (Player player, String donationUsername) { - announce(donationUsername, "дал тебе хлеба!", "дал хлеба", player, true); + public static void giveBread(Player player, String donationUsername) { + announce(donationUsername, BREAD_EVENT_SUBTEXT, BREAD_EVENT_ALERT_TEXT, player, true); Material itemType = Material.BREAD; ItemStack itemStack = new ItemStack(itemType, 4); ItemMeta meta = itemStack.getItemMeta(); meta.setDisplayName("§bХлеб"); - meta.setLore(Arrays.asList("§7Этот хлеб подарил §f" + donationUsername)); + meta.setLore(List.of("§7Этот хлеб подарил §f" + donationUsername)); itemStack.setItemMeta(meta); - Item bread = player.getWorld().dropItemNaturally(player.getLocation(), itemStack); + @Suppress(names = "UNUSED_PARAMETER") Item bread = player.getWorld().dropItemNaturally(player.getLocation(), itemStack); } - public static void callNKVD (Player player, String donationUsername) { + public static void callNKVD(Player player, String donationUsername) { Vector direction = player.getLocation().getDirection(); LivingEntity nkvdMob; - announce(donationUsername, "хочет отправить тебя в ГУЛАГ!", "хочет отправить в ГУЛАГ", player, true); + announce(donationUsername, NKVD_EVENT_TEXT, NKVD_EVENT_TEXT, player, true); direction.setY(0); direction.normalize(); for (int i = 1; i <= 3; i++) { - Location newloc = player.getLocation().clone(); + Location newLoc = player.getLocation().clone(); Vector newdir = direction.clone(); - newdir = newdir.rotateAroundY(1.5708 * i).multiply(2); - newloc.add(newdir); - nkvdMob = (LivingEntity) player.getWorld().spawnEntity(newloc, EntityType.ZOMBIE); + newdir = newdir.rotateAroundY(rotateAroundY * i).multiply(2); + newLoc.add(newdir); + nkvdMob = (LivingEntity) player.getWorld().spawnEntity(newLoc, EntityType.ZOMBIE); nkvdMob.setCustomName("§cСотрудник НКВД"); - nkvdMob.getEquipment().setItem(EquipmentSlot.HAND, new ItemStack(Material.IRON_SWORD)); - nkvdMob.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(0.3); + Objects.requireNonNull(nkvdMob.getEquipment()).setItem(EquipmentSlot.HAND, new ItemStack(Material.IRON_SWORD)); + Objects.requireNonNull(nkvdMob.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED)).setBaseValue(0.3); } } - public static void callStalin (Player player, String donationUsername) { - announce(donationUsername, "призвал Сталина разобраться с тобой!", "призвал Сталина разобраться с", player, true); + public static void callStalin(Player player, String donationUsername) { + announce(donationUsername, STALING_EVENT_TEXT + "тобой!" , STALING_EVENT_TEXT, player, true); DonationExecutor.giantMobManager.addMob(player.getLocation(), "§cИосиф Сталин"); } - public static void randomChange (Player player, String donationUsername) { - announce(donationUsername, "подменил тебе кое-что на камни...", "призвал Сталина разобраться с", player, true); + public static void randomChange(Player player, String donationUsername) { + announce(donationUsername, RANDOM_EVENT_TEXT, STALING_EVENT_TEXT, player, true); int[] randoms = new int[5]; for (int i = 0; i <= 4; i++) { int temp = 0; - Boolean isUnique = false; + boolean isUnique = false; while (!isUnique) { temp = (int) (round(random() * 35)); isUnique = true; @@ -259,38 +238,55 @@ public static void randomChange (Player player, String donationUsername) { } } randoms[i] = temp; - } - String replacedItems = new String(""); + StringBuilder replacedItems = new StringBuilder(); int replacedCounter = 0; for (int i = 0; i <= 4; i++) { if (!(player.getInventory().getItem(randoms[i]) == null)) { replacedCounter++; if (replacedCounter > 1) { - replacedItems = replacedItems + "§f, "; + replacedItems.append("§f, "); } - replacedItems = replacedItems + "§b" + player.getInventory().getItem(randoms[i]).getAmount() + " §f" + player.getInventory().getItem(randoms[i]).getI18NDisplayName().toString(); + replacedItems + .append("§b") + .append( + Objects + .requireNonNull( + player + .getInventory() + .getItem(randoms[i]) + ) + .getAmount()) + .append(" §f") + .append( + Objects + .requireNonNull( + player + .getInventory() + .getItem(randoms[i]) + ) + .getI18NDisplayName()); } player.getInventory().setItem(randoms[i], new ItemStack(Material.STONE, 1)); } if (replacedCounter == 0) { - sendSysMsgToPlayer(player,"§cТебе повезло: все камни попали в пустые слоты!"); - } else { - sendSysMsgToPlayer(player,"§cБыли заменены следующие предметусы: §f" + replacedItems); + sendSysMsgToPlayer(player, "§cТебе повезло: все камни попали в пустые слоты!"); + return; } + sendSysMsgToPlayer(player, "§cБыли заменены следующие предметусы: §f" + replacedItems); } - public static void halfHeart (Player player, String donationUsername) { - player.setHealth(1); - announce(donationUsername, "оставил тебе лишь полсердечка...", "оставил лишь полсердечка", player, true); + public static void halfHeart(Player player, String donationUsername) { + player.setHealth(eventOneHealth); + announce(donationUsername, HALF_HEART_EVENT_TEXT + SPECIAL_END_TEXT, HALF_HEART_EVENT_TEXT, player, true); } - public static void tamedBecomesEnemies (Player player, String donationUsername) { - announce(donationUsername, "настроил твоих питомцев против тебя!", "настроил прирученных питомцев против", player, true); + public static void tamedBecomesEnemies(Player player, String donationUsername) { + announce(donationUsername, ENEMIES_EVENT_TEXT, ENEMIES_EVENT_TEXT, player, true); for (Entity e : player.getWorld().getEntitiesByClasses(Wolf.class, Cat.class)) { - if (((Tameable) e).isTamed() && ((Tameable) e).getOwner().getName().equals(player.getName())) { + if (((Tameable) e).isTamed() && Objects.equals(Objects.requireNonNull(((Tameable) e).getOwner()).getName(), player.getName())) { if (e instanceof Cat) { ((Tameable) e).setOwner(null); ((Cat) e).setSitting(false); @@ -305,11 +301,8 @@ public static void tamedBecomesEnemies (Player player, String donationUsername) } } - public static void bigBoom (Player player, String donationUsername) { - announce(donationUsername, "сейчас тебя РАЗНЕСЕТ В КЛОЧЬЯ!!!", "сейчас РАЗНЕСЕТ В КЛОЧЬЯ", player, true); + public static void bigBoom(Player player, String donationUsername) { + announce(donationUsername, BOOM_EVENT_TEXT, BOOM_EVENT_TEXT, player, true); player.getWorld().createExplosion(player.getLocation(), MainConfig.bigBoomRadius, true); - } - - } diff --git a/src/main/java/igorlink/donationexecutor/executionsstaff/Donation.java b/src/main/java/igorlink/donationexecutor/executionsstaff/Donation.java index 6a33bda..9a883d5 100644 --- a/src/main/java/igorlink/donationexecutor/executionsstaff/Donation.java +++ b/src/main/java/igorlink/donationexecutor/executionsstaff/Donation.java @@ -1,53 +1,40 @@ package igorlink.donationexecutor.executionsstaff; + +import kotlin.Suppress; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; +import static org.dark0ghost.configs.Text.RU.DonationText.DEFAULT_NAME; + public class Donation { + @Getter private CommandSender sender; + @Getter private String username; + @Getter private String amount; + @Getter private String message; + @Getter + @Setter private String executionName = null; - public Donation(String _username, String _amount, String _message) { - new Donation(Bukkit.getConsoleSender(), _username, _amount, _message); + @Suppress(names = "Unused constructor") + public Donation(String username, String amount, String message) { + new Donation(Bukkit.getConsoleSender(), username, amount, message); } - public Donation(CommandSender _sender, String _username, String _amount, String _message) { - sender = _sender; - if (_username.equals("")) { - username = "Аноним"; - } else { - username = _username; + public Donation(CommandSender sender, String username, String amount, String message) { + this.sender = sender; + this.amount = amount; + this.message = message; + if (username.equals("")) { + this.username = DEFAULT_NAME; + return; } - amount = _amount; - message = _message; - } - - public CommandSender getSender() { - return sender; - } - - public String getName() { - return username; - } - - public String getAmount() { - return amount; + this.username = username; } - - public String getMessage() { - return message; - } - - public String getexecutionName() { - return executionName; - } - - public void setexecutionName(String _executionName) { - executionName = _executionName; - } - - -} +} \ No newline at end of file diff --git a/src/main/java/igorlink/donationexecutor/executionsstaff/GiantMobManager.java b/src/main/java/igorlink/donationexecutor/executionsstaff/GiantMobManager.java index 082ee21..dd14038 100644 --- a/src/main/java/igorlink/donationexecutor/executionsstaff/GiantMobManager.java +++ b/src/main/java/igorlink/donationexecutor/executionsstaff/GiantMobManager.java @@ -3,6 +3,7 @@ import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent; import igorlink.donationexecutor.DonationExecutor; import io.papermc.paper.event.entity.EntityMoveEvent; +import kotlin.Suppress; import org.bukkit.*; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; @@ -25,8 +26,8 @@ import org.bukkit.event.Listener; public class GiantMobManager { - private HashMap listOfMobLists = new HashMap(); - private HashMap listOfGiantMob = new HashMap(); + private final HashMap> listOfMobLists = new HashMap<>(); + private @Suppress(names = "UNUSED_PARAMETER") final HashMap listOfGiantMob = new HashMap<>(); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -71,7 +72,7 @@ private void addMobToList(@NotNull GiantMob newGiantMob) { if (listOfMobLists.containsKey(newGiantMob.getName())) { listOfMobLists.get(newGiantMob.getName()).put(newGiantMob.getUUID(), newGiantMob); } else { - listOfMobLists.put(newGiantMob.getName(), new HashMap()); + listOfMobLists.put(newGiantMob.getName(), new HashMap()); listOfMobLists.get(newGiantMob.getName()).put(newGiantMob.getUUID(), newGiantMob); } @@ -87,7 +88,7 @@ private void removeMobFromList(@NotNull LivingEntity giantMob) { //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //Класс гигантского моба - private class GiantMob { + private static class GiantMob { private int timesThisGiantMobIsOnOnePlace = 0; private String thisGiantMobPlayerCurrentTargetName = null; private int stepsAfterHiding = 0; @@ -96,7 +97,6 @@ private class GiantMob { final private int howManySnowballsMobLaunches = 4; final private Boolean SnowballsFollowingTarget = false; - final private int giantMobTrackingRange = 40; final private static int timeBeforeThisGiantMobForgetHisTarget = 5; final private static int ticksBetweenSnowballsShots = 7; @@ -118,7 +118,7 @@ public GiantMob(@NotNull Location playerLocation, String mobName) { this.giantMobLivingEntity.setGravity(true); this.giantMobLivingEntity.setRemoveWhenFarAway(false); this.thisGiantMobUUID = giantMobLivingEntity.getUniqueId(); - this.giantMobLivingEntity.getEquipment().setItem(EquipmentSlot.HAND, new ItemStack(Material.IRON_SWORD)); + Objects.requireNonNull(this.giantMobLivingEntity.getEquipment()).setItem(EquipmentSlot.HAND, new ItemStack(Material.IRON_SWORD)); //Заставляем бегать и стрелять this.makeGiantMobAttackWithFireballs(); @@ -153,21 +153,22 @@ public UUID getUUID() { //Поиск ближайшей цели private LivingEntity findGiantMobTarget() { //получаем список ближайших врагов dв радиусе sralinShootingRadius - Double sralinShootingRadius = (double) giantMobTrackingRange; + int giantMobTrackingRange = 40; + double sralinShootingRadius = (double) giantMobTrackingRange; List listOfNearbyEntities = giantMobLivingEntity.getNearbyEntities(sralinShootingRadius, sralinShootingRadius, sralinShootingRadius); List listOfNearbyPlayers = new ArrayList<>(); List listOfNearbyLivingEntities = new ArrayList<>(); //Пробегаемся и ищем игроков for (Entity e : listOfNearbyEntities) { - RayTraceResult rtRes1 = null; - RayTraceResult rtRes2 = null; - RayTraceResult rtRes3 = null; - RayTraceResult rtRes4 = null; - RayTraceResult rtRes5 = null; - RayTraceResult rtRes6 = null; - RayTraceResult rtRes7 = null; - RayTraceResult rtRes8 = null; + RayTraceResult rtRes1; + RayTraceResult rtRes2; + RayTraceResult rtRes3; + RayTraceResult rtRes4; + RayTraceResult rtRes5; + RayTraceResult rtRes6; + RayTraceResult rtRes7; + RayTraceResult rtRes8; if (e instanceof LivingEntity) { //Позиции псевдоглаз вокруг головы с каждой стороны @@ -181,10 +182,10 @@ private LivingEntity findGiantMobTarget() { rtRes2 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos2, genVec(rtGiantMobPseudoEyesPos2, ((LivingEntity) e).getEyeLocation()), rtGiantMobPseudoEyesPos2.distance(((LivingEntity) e).getEyeLocation()), FluidCollisionMode.NEVER, true); rtRes3 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos3, genVec(rtGiantMobPseudoEyesPos3, ((LivingEntity) e).getEyeLocation()), rtGiantMobPseudoEyesPos3.distance(((LivingEntity) e).getEyeLocation()), FluidCollisionMode.NEVER, true); rtRes4 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos4, genVec(rtGiantMobPseudoEyesPos4, ((LivingEntity) e).getEyeLocation()), rtGiantMobPseudoEyesPos4.distance(((LivingEntity) e).getEyeLocation()), FluidCollisionMode.NEVER, true); - rtRes5 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos1, genVec(rtGiantMobPseudoEyesPos1, ((LivingEntity) e).getLocation()), rtGiantMobPseudoEyesPos1.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); - rtRes6 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos2, genVec(rtGiantMobPseudoEyesPos2, ((LivingEntity) e).getLocation()), rtGiantMobPseudoEyesPos2.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); - rtRes7 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos3, genVec(rtGiantMobPseudoEyesPos3, ((LivingEntity) e).getLocation()), rtGiantMobPseudoEyesPos3.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); - rtRes8 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos4, genVec(rtGiantMobPseudoEyesPos4, ((LivingEntity) e).getLocation()), rtGiantMobPseudoEyesPos4.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); + rtRes5 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos1, genVec(rtGiantMobPseudoEyesPos1, e.getLocation()), rtGiantMobPseudoEyesPos1.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); + rtRes6 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos2, genVec(rtGiantMobPseudoEyesPos2, e.getLocation()), rtGiantMobPseudoEyesPos2.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); + rtRes7 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos3, genVec(rtGiantMobPseudoEyesPos3, e.getLocation()), rtGiantMobPseudoEyesPos3.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); + rtRes8 = giantMobLivingEntity.getWorld().rayTraceBlocks(rtGiantMobPseudoEyesPos4, genVec(rtGiantMobPseudoEyesPos4, e.getLocation()), rtGiantMobPseudoEyesPos4.distance(((LivingEntity) e).getLocation()), FluidCollisionMode.NEVER, true); //Если Сталин может из любой позиции поврота голвоы увидеть верх или низ цели, то эта цель вносится в список кандидатов if ((rtRes1 == null) || (rtRes2 == null) || (rtRes3 == null) || (rtRes4 == null) || (rtRes5 == null) || (rtRes6 == null) || (rtRes7 == null) || (rtRes8 == null)) { @@ -237,21 +238,19 @@ private LivingEntity findGiantMobTarget() { if ( (!(target instanceof Player)) && (!(thisGiantMobPlayerCurrentTargetName == null)) ) { //Если прошлая цель-игрок существует, и он не мертв и находится в том же мире, что и наш моб - if ( (!(getPlayer(thisGiantMobPlayerCurrentTargetName).isDead())) && (getPlayer(thisGiantMobPlayerCurrentTargetName).getWorld() == giantMobLivingEntity.getWorld()) ) { + if ( (!(Objects.requireNonNull(getPlayer(thisGiantMobPlayerCurrentTargetName)).isDead())) && (Objects.requireNonNull(getPlayer(thisGiantMobPlayerCurrentTargetName)).getWorld() == giantMobLivingEntity.getWorld()) ) { //Если не подошло время забыть о нем и он не стал спектэйтором, фокусим моба на него - if ((stepsAfterHiding <= timeBeforeThisGiantMobForgetHisTarget * 2) && (!(getPlayer(thisGiantMobPlayerCurrentTargetName).getGameMode()==GameMode.SPECTATOR)) && (!(getPlayer(thisGiantMobPlayerCurrentTargetName).getGameMode()==GameMode.CREATIVE))){ + if ((stepsAfterHiding <= timeBeforeThisGiantMobForgetHisTarget * 2) && (!(Objects.requireNonNull(getPlayer(thisGiantMobPlayerCurrentTargetName)).getGameMode()==GameMode.SPECTATOR)) && (!(getPlayer(thisGiantMobPlayerCurrentTargetName).getGameMode()==GameMode.CREATIVE))){ target = getPlayer(thisGiantMobPlayerCurrentTargetName); stepsAfterHiding++; - } else { + return target; + } //если подошло время забыть про него - забываем stepsAfterHiding = 0; thisGiantMobPlayerCurrentTargetName = null; - } - } } - //Возвращаем ближайшее ентити (игрок в приоритете) return target; } @@ -272,11 +271,11 @@ private void forceGiantMobToMove() { public void run() { LivingEntity thisGiantMobLivingEntity = thisGiantMob.giantMobLivingEntity; - if ( (thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunning)) ) { + if ( (thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunningStatus)) ) { //Если Сталин уже помер, отрубаем задание this.cancel(); return; - } else { + } //Если не помер, находим ближайшую цель (игроки в приоритете) LivingEntity target; target = thisGiantMob.findGiantMobTarget(); @@ -347,7 +346,7 @@ public void run() { @Override public void run() { - if ( (thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunning)) ) { + if ( (thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunningStatus)) ) { this.cancel(); return; } @@ -383,7 +382,6 @@ public void run() { } }.runTaskLater(DonationExecutor.getInstance(), 7); } - } } }.runTaskTimer(DonationExecutor.getInstance(), 0, 10); } @@ -401,7 +399,7 @@ public void run() { LivingEntity thisGiantMobLivingEntity = thisGiantMob.giantMobLivingEntity; //Если моб уже не существует, отменяем стрельбу - if ((thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunning)) ) { + if ((thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunningStatus)) ) { this.cancel(); return; } @@ -434,7 +432,7 @@ public void run() { LivingEntity thisGiantMobLivingEntity = thisGiantMob.giantMobLivingEntity; //Если моб уже не существует, отменяем стрельбу - if ( (thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunning)) ) { + if ( (thisGiantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunningStatus)) ) { this.cancel(); return; } @@ -453,7 +451,7 @@ public void run() { new BukkitRunnable() { @Override public void run() { - if ( (thisGiantMob.giantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunning)) ) { + if ( (thisGiantMob.giantMobLivingEntity.isDead()) || (!(DonationExecutor.isRunningStatus)) ) { this.cancel(); return; } @@ -476,12 +474,11 @@ public void run() { new BukkitRunnable() { @Override public void run() { - if ( (snowball.isDead()) || finalTarget.isDead() || (!(finalTarget.getWorld() == snowball.getWorld())) || (!(DonationExecutor.isRunning)) ) { + if ( (snowball.isDead()) || finalTarget.isDead() || (!(finalTarget.getWorld() == snowball.getWorld())) || (!(DonationExecutor.isRunningStatus)) ) { this.cancel(); return; - } else { - snowball.setVelocity(genVec(snowball.getLocation(), finalTarget.getEyeLocation())); } + snowball.setVelocity(genVec(snowball.getLocation(), finalTarget.getEyeLocation())); } }.runTaskTimer(DonationExecutor.getInstance(), finali * ticksBetweenSnowballsShots, 1); } @@ -500,7 +497,7 @@ public void run() { //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //Проверка всех добавлений и удалений из мира, чтобы ловить и упаковывать подходящих гигантов или удалять их из списка - private class GiantMobEventListener implements Listener{ + private static class GiantMobEventListener implements Listener{ GiantMobManager thisInstanceOfGiantMobManager; private GiantMobEventListener(GiantMobManager _thisInstanceOfGiantMobManager) { @@ -527,7 +524,8 @@ public void onGiantMobDamage(EntityDamageEvent e){ if ( (e.getEntity() instanceof Giant) && ((e.getCause() == EntityDamageEvent.DamageCause.FALL) || (e.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) || (e.getCause() == EntityDamageEvent.DamageCause.FIRE) || (e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK))) { e.setCancelled(true); // sendSysMsgToPlayer(getPlayer(Executor.nameOfStreamerPlayer), "Cancelled DMG from: " + e.getCause().toString()); - } else if (e.getEntity() instanceof Giant) { + } + if (e.getEntity() instanceof Giant) { // sendSysMsgToPlayer(getPlayer(Executor.nameOfStreamerPlayer), "Passed DMG from: " + e.getCause().toString()); } } @@ -572,6 +570,4 @@ public void onComeTooClose(EntityMoveEvent e){ } } - - } diff --git a/src/main/java/igorlink/donationexecutor/executionsstaff/ListOfStreamerPlayers.java b/src/main/java/igorlink/donationexecutor/executionsstaff/ListOfStreamerPlayers.java index f6d44aa..2e35ba5 100644 --- a/src/main/java/igorlink/donationexecutor/executionsstaff/ListOfStreamerPlayers.java +++ b/src/main/java/igorlink/donationexecutor/executionsstaff/ListOfStreamerPlayers.java @@ -8,29 +8,30 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class ListOfStreamerPlayers { - private List listOfStreamerPlayers = new ArrayList(); + private final List listOfStreamerPlayers = new ArrayList(); //Таймер будет выполнять донаты из очередей игроков каждые 2 сек, если они живы и онлайн - выполняем донат и убираем его из очереди public ListOfStreamerPlayers() { new BukkitRunnable() { @Override public void run() { - if (!DonationExecutor.isRunning) { + if (!DonationExecutor.isRunningStatus) { this.cancel(); return; } for (StreamerPlayer sp : listOfStreamerPlayers) { if ( !(Bukkit.getPlayer(sp.getName()) == null) ) { - if (!(Bukkit.getPlayer(sp.getName()).isDead())) { + if (!(Objects.requireNonNull(Bukkit.getPlayer(sp.getName())).isDead())) { Donation donation = sp.takeDonationFromQueue(); if (donation==null) { continue; } - Utils.logToConsole("Отправлен на выполнение донат §b" + donation.getexecutionName() + "§f для стримера §b" + sp.getName() + "§f от донатера §b" + donation.getName()); - Executor.DoExecute(donation.getSender(), sp.getName(), donation.getName(), donation.getAmount(), donation.getMessage(), donation.getexecutionName()); + Utils.logToConsole("Отправлен на выполнение донат §b" + donation.getExecutionName() + "§f для стримера §b" + sp.getName() + "§f от донатера §b" + donation.getUsername()); + Executor.DoExecute(donation.getSender(), sp.getName(), donation.getUsername(), donation.getAmount(), donation.getMessage(), donation.getExecutionName()); } } @@ -68,9 +69,9 @@ public void addToDonationsQueue(Donation donation) { for (StreamerPlayer sp : listOfStreamerPlayers) { execution = sp.checkExecution(Utils.cutOffKopeykis(donation.getAmount())); if (!(execution == null)) { - donation.setexecutionName(execution); + donation.setExecutionName(execution); sp.putDonationToQueue(donation); - Utils.logToConsole("Донат от §b" + donation.getName() + "§f в размере §b" + donation.getAmount() + " руб.§f был обработан и отправлен в очередь на выполнение."); + Utils.logToConsole("Донат от §b" + donation.getUsername() + "§f в размере §b" + donation.getAmount() + " руб.§f был обработан и отправлен в очередь на выполнение."); return; } } diff --git a/src/main/java/igorlink/donationexecutor/executionsstaff/StreamerPlayer.java b/src/main/java/igorlink/donationexecutor/executionsstaff/StreamerPlayer.java index 2d89de3..679aae6 100644 --- a/src/main/java/igorlink/donationexecutor/executionsstaff/StreamerPlayer.java +++ b/src/main/java/igorlink/donationexecutor/executionsstaff/StreamerPlayer.java @@ -16,10 +16,10 @@ import java.util.*; public class StreamerPlayer { - private String streamerPlayerName; - private List listOfDeathDropItems = new ArrayList(); - private Queue listOfQueuedDonations = new LinkedList(); - private HashMap listOfAmounts = new HashMap(); + private final String streamerPlayerName; + private final List listOfDeathDropItems = new ArrayList(); + private final Queue listOfQueuedDonations = new LinkedList(); + private final HashMap listOfAmounts = new HashMap(); //Инициализация нового объекта стримера-игрока diff --git a/src/main/java/igorlink/service/MainConfig.java b/src/main/java/igorlink/service/MainConfig.java index cc81967..fb350cf 100644 --- a/src/main/java/igorlink/service/MainConfig.java +++ b/src/main/java/igorlink/service/MainConfig.java @@ -1,24 +1,27 @@ package igorlink.service; import igorlink.donationexecutor.DonationExecutor; +import kotlin.Suppress; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; -import static igorlink.service.Utils.*; -import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Objects; + +import static igorlink.service.Utils.logToConsole; public class MainConfig { - private static HashMap> donationAmountsHashMap = new HashMap>(); + private static final HashMap> donationAmountsHashMap = new HashMap<>(); private static FileConfiguration config = DonationExecutor.getInstance().getConfig(); public static int dirtAmount = 0; public static int diamondsAmount = 0; public static int breadAmount = 0; public static int bigBoomRadius = 0; public static String token; - public static List listOfBlackListedSubstrings = new ArrayList<>(); - public static List listOfWhiteListedSubstrings = new ArrayList<>(); + public @SuppressWarnings("unchecked") static List listOfBlackListedSubstrings = new ArrayList<>(); + public @SuppressWarnings("unchecked") static List listOfWhiteListedSubstrings = new ArrayList<>(); private static Boolean twitchFilter; public MainConfig() { @@ -31,7 +34,7 @@ public static FileConfiguration getConfig(){ } //Обновить данные из конфига - public static void reloadMainConfig() { + public @Suppress(names = "UNUSED_PARAMETER") static void reloadMainConfig() { loadMainConfig(true); } @@ -52,52 +55,40 @@ public static void loadMainConfig(Boolean isReload) { config = DonationExecutor.getInstance().getConfig(); - String stringWithPlayersNames = config.getString("StreamersNamesList"); - List streamerPlayersNamesList = new ArrayList(Arrays.asList(stringWithPlayersNames.split(","))); + @SuppressWarnings("unchecked") List streamerPlayersNamesList = (List) getConfig().getList("StreamersNamesList"); + assert streamerPlayersNamesList != null; for (String playerName : streamerPlayersNamesList) { DonationExecutor.getInstance().listOfStreamerPlayers.addStreamerPlayer(playerName); } logToConsole("При чтении файла конфигурации было добавлено §b" + DonationExecutor.getInstance().listOfStreamerPlayers.getNumberOfStreamers() + "§f стримеров."); - dirtAmount = Integer.valueOf(config.getString("DirtAmount")); - diamondsAmount = Integer.valueOf(config.getString("DiamondsAmount")); - breadAmount = Integer.valueOf(config.getString("BreadAmount")); - bigBoomRadius = Integer.valueOf(config.getString("BigBoomRadius")); + dirtAmount = Integer.parseInt(Objects.requireNonNull(config.getString("DirtAmount"))); + diamondsAmount = Integer.parseInt(Objects.requireNonNull(config.getString("DiamondsAmount"))); + breadAmount = Integer.parseInt(Objects.requireNonNull(config.getString("BreadAmount"))); + bigBoomRadius = Integer.parseInt(Objects.requireNonNull(config.getString("BigBoomRadius"))); token = config.getString("DonationAlertsToken"); - listOfBlackListedSubstrings = Arrays.asList(config.getString("BlacklistedSubstrings").split(",")); - listOfWhiteListedSubstrings = Arrays.asList(config.getString("WhitelistedSubstrings").split(",")); - - if (config.getString("TwitchFilter") == "true") { - twitchFilter = true; - } else if (config.getString("TwitchFilter") == "false") { - twitchFilter = false; - } - else { - logToConsole("Ошибка при чтении значение TwitchFilter"); - } - + listOfBlackListedSubstrings = (List) config.getList("BlacklistedSubstrings"); + listOfWhiteListedSubstrings = (List) config.getList("WhitelistedSubstrings"); + twitchFilter = config.getBoolean("TwitchFilter"); + logToConsole("Ошибка при чтении значение TwitchFilter"); } - - public static void turnFilterOn() { twitchFilter = true; - config.set("TwitchFilter", "true"); } public static void turnFilterOff() { twitchFilter = false; - config.set("TwitchFilter", "false"); } - public static Boolean getFilterStatus() { + public @Suppress(names = "UNUSED") static Boolean getFilterStatus() { return twitchFilter; } - public static HashMap getNameAndExecution (@NotNull String donationAmount) { + public @Suppress(names = "UNUSED") static HashMap getNameAndExecution (@NotNull String donationAmount) { String thisDonateForStreamerName = null; String nameOfExecution = null; for (String p : donationAmountsHashMap.keySet()) { @@ -113,6 +104,4 @@ public static HashMap getNameAndExecution (@NotNull String donat return null; } - - -} +} \ No newline at end of file diff --git a/src/main/java/igorlink/service/Utils.java b/src/main/java/igorlink/service/Utils.java index debc62b..5766d65 100644 --- a/src/main/java/igorlink/service/Utils.java +++ b/src/main/java/igorlink/service/Utils.java @@ -1,28 +1,44 @@ package igorlink.service; import com.destroystokyo.paper.Title; +import org.dark0ghost.annotations.ExperimentalApi; import igorlink.donationexecutor.DonationExecutor; +import kotlin.Suppress; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; + import java.math.BigInteger; import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Utils { + + @ExperimentalApi(message = "use in isBlackListed") + private static @NotNull String validateText(@NotNull String validationText) { + for (String ss : MainConfig.listOfWhiteListedSubstrings) { + if (validationText.contains(ss)) { + validationText = validationText.replace(ss, ""); + } + } + return validationText; + } + public static Boolean isPluginActive; //Вывод сообщения в консоль - public static void logToConsole(String text){ + public static void logToConsole(String text) { Bukkit.getConsoleSender().sendMessage("§c[DonationExecutor] §f" + text); } //Отправка сообщения игроку со стороны плагина - public static void sendSysMsgToPlayer(Player player, String text){ + public static void sendSysMsgToPlayer(Player player, String text) { player.sendMessage("§c[DE] §f" + text); } @@ -30,7 +46,7 @@ public static byte[] decodeUsingBigInteger(String hexString) { byte[] byteArray = new BigInteger(hexString, 16).toByteArray(); if (byteArray[0] == 0) { byte[] output = new byte[byteArray.length - 1]; - System.arraycopy(byteArray, 1, output,0, output.length); + System.arraycopy(byteArray, 1, output, 0, output.length); return output; } return byteArray; @@ -38,10 +54,10 @@ public static byte[] decodeUsingBigInteger(String hexString) { public static Boolean CheckNameAndToken() { isPluginActive = true; - if ((DonationExecutor.getInstance().getConfig().getString("DonationAlertsToken") == "") || (DonationExecutor.getInstance().getConfig().getString("DonationAlertsToken") == null)) { + if ((Objects.equals(DonationExecutor.getInstance().getConfig().getString("DonationAlertsToken"), "")) || (DonationExecutor.getInstance().getConfig().getString("DonationAlertsToken") == null)) { logToConsole("Вы не указали свой токен DonationAlerts в файле конфигурации плагина, поэтому сейчас плагин не работает."); isPluginActive = false; - } else if ((DonationExecutor.getInstance().getConfig().getString("Nickname") == "") || (DonationExecutor.getInstance().getConfig().getString("Nickname") == "")) { + } else if ((Objects.equals(DonationExecutor.getInstance().getConfig().getString("Nickname"), "")) || (Objects.equals(DonationExecutor.getInstance().getConfig().getString("Nickname"), ""))) { logToConsole("Вы не указали свой игровой никнейм в файле конфигурации плагина, поэтому сейчас плагин не работает."); isPluginActive = false; } @@ -51,7 +67,7 @@ public static Boolean CheckNameAndToken() { public static void announce(String donaterName, String subText, String alterSubtext, Player player, Boolean bigAnnounce) { String _donaterName = donaterName; - if (bigAnnounce) { + if (bigAnnounce) { if (donaterName.equals("")) { _donaterName = "Кто-то"; } @@ -60,11 +76,11 @@ public static void announce(String donaterName, String subText, String alterSubt player.sendMessage("§c[DE] §fДонатер §c" + _donaterName, "§f" + subText); } - if (_donaterName == "") { + if (Objects.equals(_donaterName, "")) { _donaterName = "Кто-то"; } for (Player p : Bukkit.getOnlinePlayers()) { - if (!(p.getName() == player.getName())) { + if (!(p.getName().equals(player.getName()))) { p.sendMessage("§c[DE] §fДонатер §c" + _donaterName + " §f" + alterSubtext + " §b" + player.getName()); } } @@ -83,29 +99,28 @@ public static Vector genVec(Location a, Location b, Boolean isNormalized) { public static Vector genVec(Location a, Location b) { Vector vec = locToVec(b).clone().subtract(locToVec(a)); - return vec.normalize(); + return vec.normalize(); } public static Vector locToVec(Location loc) { - Vector vec = new Vector(loc.getX(), loc.getY(), loc.getZ()); - return vec; + return new Vector(loc.getX(), loc.getY(), loc.getZ()); } public static String cutOffKopeykis(String donationAmountWithKopeykis) { - String amountWithoutKopeykis = ""; + StringBuilder amountWithoutKopeykis = new StringBuilder(); for (int i = 0; i <= donationAmountWithKopeykis.length() - 1; i++) { if (donationAmountWithKopeykis.charAt(i) == '.') { break; - } else if (donationAmountWithKopeykis.charAt(i) == ' ') { + } + if (donationAmountWithKopeykis.charAt(i) == ' ') { continue; - } else { - amountWithoutKopeykis = amountWithoutKopeykis + donationAmountWithKopeykis.charAt(i); } + amountWithoutKopeykis.append(donationAmountWithKopeykis.charAt(i)); } - - return amountWithoutKopeykis; + return amountWithoutKopeykis.toString(); } + @Suppress(names = "UNUSED_PARAMETER") public static Boolean isBlackListed(String text) { HashMap> mapOfSynonimousChars = new HashMap>(); @@ -122,8 +137,8 @@ public static Boolean isBlackListed(String text) { mapOfSynonimousChars.put('п', (Arrays.asList('p', 'n', 'и', 'р'))); //rus mapOfSynonimousChars.put('o', (Arrays.asList('о', '0'))); //eng mapOfSynonimousChars.put('о', (Arrays.asList('o', '0'))); //rus - mapOfSynonimousChars.put('a', (Arrays.asList('а'))); //eng - mapOfSynonimousChars.put('а', (Arrays.asList('a'))); //rus + mapOfSynonimousChars.put('a', (List.of('а'))); //eng + mapOfSynonimousChars.put('а', (List.of('a'))); //rus mapOfSynonimousChars.put('и', (Arrays.asList('i', 'n', 'e', 'е', '|', 'l', '!', '1', '3', 'й'))); //rus mapOfSynonimousChars.put('i', (Arrays.asList('1', 'и', 'e', 'е', '|', 'l', '!', 'й'))); //eng mapOfSynonimousChars.put('с', (Arrays.asList('c', 's', '$', '5'))); //rus @@ -140,13 +155,13 @@ public static Boolean isBlackListed(String text) { mapOfSynonimousChars.put('х', (Arrays.asList('x', 'h'))); //rus mapOfSynonimousChars.put('ы', (Arrays.asList('у', 'u', 'y'))); //rus mapOfSynonimousChars.put('ы', (Arrays.asList('у', 'u', 'y'))); //rus - mapOfSynonimousChars.put('ч', (Arrays.asList('4')));//rus - mapOfSynonimousChars.put('k', (Arrays.asList('к')));//eng - mapOfSynonimousChars.put('к', (Arrays.asList('k')));//rus + mapOfSynonimousChars.put('ч', (List.of('4')));//rus + mapOfSynonimousChars.put('k', (List.of('к')));//eng + mapOfSynonimousChars.put('к', (List.of('k')));//rus mapOfSynonimousChars.put('0', (Arrays.asList('o', 'о'))); //num mapOfSynonimousChars.put('1', (Arrays.asList('i', 'l'))); //num - mapOfSynonimousChars.put('3', (Arrays.asList('e', 'е','з'))); - mapOfSynonimousChars.put('4', (Arrays.asList('ч'))); + mapOfSynonimousChars.put('3', (Arrays.asList('e', 'е', 'з'))); + mapOfSynonimousChars.put('4', (List.of('ч'))); mapOfSynonimousChars.put('5', (Arrays.asList('с', 'c', 's'))); mapOfSynonimousChars.put('9', (Arrays.asList('r', 'я'))); @@ -155,8 +170,8 @@ public static Boolean isBlackListed(String text) { Pattern pattern = Pattern.compile("[l1i]*[\\-]*[l1i]*"); Matcher matcher = pattern.matcher(validationText); - if ( (matcher.find()) && (matcher.group().length()>0) ) { - validationText = validationText.replace(matcher.group(), "н"); + if ((matcher.find()) && (matcher.group().length() > 0)) { + validationText = validationText.replace(matcher.group(), "н"); } validationText = validationText.replace(" ", ""); @@ -171,13 +186,6 @@ public static Boolean isBlackListed(String text) { return false; } -// for (String ss : MainConfig.listOfWhiteListedSubstrings) { -// if (validationText.contains(ss)) { -// validationText = validationText.replace(ss, ""); -// } -// } - - if (!(validationText.matches("[a-zа-я0-9$!ё]*"))) { return true; } @@ -200,10 +208,10 @@ public static Boolean isBlackListed(String text) { } } - Boolean repeated = true; - Boolean finishCycle = false; + boolean repeated = true; + boolean finishCycle = false; while ((repeated) && (!finishCycle)) { - if (j==0) { + if (j == 0) { break; } if (!(validationText.charAt(tempi + j) == validationText.charAt(tempi + j - 1))) { @@ -216,8 +224,8 @@ public static Boolean isBlackListed(String text) { } } tempi++; - if ((validationText.length()-tempi-j) < (ss.length()-j)) { - finishCycle=true; + if ((validationText.length() - tempi - j) < (ss.length() - j)) { + finishCycle = true; break; } } @@ -233,16 +241,11 @@ public static Boolean isBlackListed(String text) { continue; } } - break; - } } } - return false; } - - } diff --git a/src/main/kotlin/org/dark0ghost/annotations/ExperimentalApi.kt b/src/main/kotlin/org/dark0ghost/annotations/ExperimentalApi.kt new file mode 100644 index 0000000..a1c63fb --- /dev/null +++ b/src/main/kotlin/org/dark0ghost/annotations/ExperimentalApi.kt @@ -0,0 +1,6 @@ +package org.dark0ghost.annotations + +@RequiresOptIn(message = "This API is experimental. It may be changed in the future without notice.") +@Retention(AnnotationRetention.BINARY) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) +annotation class ExperimentalApi(val message: String) diff --git a/src/main/kotlin/org/dark0ghost/annotations/MagicConst.kt b/src/main/kotlin/org/dark0ghost/annotations/MagicConst.kt new file mode 100644 index 0000000..86a1798 --- /dev/null +++ b/src/main/kotlin/org/dark0ghost/annotations/MagicConst.kt @@ -0,0 +1,4 @@ +package org.dark0ghost.annotations + +@Target(AnnotationTarget.FIELD) +annotation class MagicConst diff --git a/src/main/kotlin/org/dark0ghost/configs/Text.kt b/src/main/kotlin/org/dark0ghost/configs/Text.kt new file mode 100644 index 0000000..dbda1a0 --- /dev/null +++ b/src/main/kotlin/org/dark0ghost/configs/Text.kt @@ -0,0 +1,57 @@ +package org.dark0ghost.configs + +object Text { + object RU { + object ExecutorText { + const val SPECIAL_END_TEXT: String = "...." + + const val UNIDENTIFIED_USER_NAME: String = "Кто-то" + + const val SHIT_INVENTORY_EVENT_TEXT: String = "насрал тебе в инвентарь" + const val SHIT_INVENTORY_LORE: String = "§7Это говно ужасно вонюче и занимает много места" + + const val FAIL_DROP_EVENT_TEXT: String = "безуспешно пытался выбить у тебя предмет из рук" + const val SUCCESS_DROP_EVENT_TEXT: String = "выбил у тебя предмет из рук" + + const val LESH_EVENT_TEXT: String = "дал тебе леща" + + const val KICK_EVENT_TEXT: String = "дал тебе смачного пинка под зад" + + const val SUCCESS_CLEAR_DROP_EVENT_TEXT: String = "уничтожил твой посмертный дроп" + const val FAIL_CLEAR_DROP_EVENT_TEXT: String = "безуспешно пытался уничтожить твой посмертный дроп" + + const val SPAWN_CREEPER_EVENT_TEXT: String = "прислал тебе в подарок крипера" + + const val GIVE_DIAMOND_EVENT_TEXT: String = "насыпал тебе алмазов!" + + const val BREAD_EVENT_SUBTEXT: String = "дал тебе хлеба!" + const val BREAD_EVENT_ALERT_TEXT: String = "дал хлеба" + + const val NKVD_EVENT_TEXT: String = "хочет отправить тебя в ГУЛАГ!" + + const val STALING_EVENT_TEXT: String = "призвал Сталина разобраться с" + + const val RANDOM_EVENT_TEXT: String = "подменил тебе кое-что на камни..." + + const val HALF_HEART_EVENT_TEXT: String = "оставил тебе лишь полсердечка" + + const val ENEMIES_EVENT_TEXT: String = "настроил твоих питомцев против тебя!" + + const val BOOM_EVENT_TEXT: String = "сейчас тебя РАЗНЕСЕТ В КЛОЧЬЯ!!!" + + } + + object FilterSubCommandText { + const val FILTER_ON_TEXT: String = "Фильтр никнеймов донатеров §bВКЛЮЧЕН" + const val FILTER_OFF_TEXT: String = "Фильтр никнеймов донатеров §bВЫКЛЮЧЕН" + } + + object ReloadSubCommandText { + const val UPDATE_SETTINGS_TEXT: String = "Настройки успешно обновлены!" + } + + object DonationText { + const val DEFAULT_NAME: String = "Аноним" + } + } +} \ No newline at end of file diff --git a/src/test/kotlin/TestGetterDonation.kt b/src/test/kotlin/TestGetterDonation.kt new file mode 100644 index 0000000..61adcd3 --- /dev/null +++ b/src/test/kotlin/TestGetterDonation.kt @@ -0,0 +1,116 @@ +import igorlink.donationexecutor.executionsstaff.Donation +import net.kyori.adventure.text.Component +import org.bukkit.Server +import org.bukkit.command.CommandSender +import org.bukkit.permissions.Permission +import org.bukkit.permissions.PermissionAttachment +import org.bukkit.permissions.PermissionAttachmentInfo +import org.bukkit.plugin.Plugin +import org.junit.jupiter.api.Test +import java.util.* + + + +internal class TestGetterDonation { + private val donation: Donation = Donation(testSender,"IgorLink", 100.toString(), "test Getter") + + @Test + fun testGetterDonation() { + assert(donation.message == "test Getter") + assert(donation.amount == "100") + assert(donation.message == "test Getter") + assert(donation.executionName == null) + } + + @Test + fun testSetterExecutionName() { + donation.executionName = "testString" + assert(donation.executionName == "testString") + } +} + +private val testSender: CommandSender = object: CommandSender{ + override fun spigot(): CommandSender.Spigot { + TODO("Not yet implemented") + } + + override fun name(): Component { + TODO("Not yet implemented") + } + + override fun sendMessage(message: String) { + TODO("Not yet implemented") + } + + override fun sendMessage(vararg messages: String) { + TODO("Not yet implemented") + } + + override fun sendMessage(sender: UUID?, message: String) { + TODO("Not yet implemented") + } + + override fun sendMessage(sender: UUID?, vararg messages: String) { + TODO("Not yet implemented") + } + + override fun isOp(): Boolean { + TODO("Not yet implemented") + } + + override fun setOp(value: Boolean) { + TODO("Not yet implemented") + } + + override fun isPermissionSet(name: String): Boolean { + TODO("Not yet implemented") + } + + override fun isPermissionSet(perm: Permission): Boolean { + TODO("Not yet implemented") + } + + override fun hasPermission(name: String): Boolean { + TODO("Not yet implemented") + } + + override fun hasPermission(perm: Permission): Boolean { + TODO("Not yet implemented") + } + + override fun addAttachment(plugin: Plugin, name: String, value: Boolean): PermissionAttachment { + TODO("Not yet implemented") + } + + override fun addAttachment(plugin: Plugin): PermissionAttachment { + TODO("Not yet implemented") + } + + override fun addAttachment(plugin: Plugin, name: String, value: Boolean, ticks: Int): PermissionAttachment? { + TODO("Not yet implemented") + } + + override fun addAttachment(plugin: Plugin, ticks: Int): PermissionAttachment? { + TODO("Not yet implemented") + } + + override fun removeAttachment(attachment: PermissionAttachment) { + TODO("Not yet implemented") + } + + override fun recalculatePermissions() { + TODO("Not yet implemented") + } + + override fun getEffectivePermissions(): MutableSet { + TODO("Not yet implemented") + } + + override fun getServer(): Server { + TODO("Not yet implemented") + } + + override fun getName(): String { + TODO("Not yet implemented") + } +}