diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e750102..2e6e589 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 index c53aefa..1b6c787 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -32,10 +32,10 @@ # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». # # Important for patching: # diff --git a/gradlew.bat b/gradlew.bat index 107acd3..ac1b06f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,89 +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 +@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/src/main/java/dev/plex/command/PlexCommand.java b/src/main/java/dev/plex/command/PlexCommand.java index 0f61f92..e8293d3 100644 --- a/src/main/java/dev/plex/command/PlexCommand.java +++ b/src/main/java/dev/plex/command/PlexCommand.java @@ -1,5 +1,6 @@ package dev.plex.command; +import com.google.common.collect.ImmutableList; import dev.plex.Plex; import dev.plex.cache.DataUtils; import dev.plex.cache.PlayerCache; @@ -7,26 +8,25 @@ import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.exception.CommandArgumentException; import dev.plex.command.exception.CommandFailException; +import dev.plex.command.exception.ConsoleMustDefinePlayerException; +import dev.plex.command.exception.ConsoleOnlyException; import dev.plex.command.exception.PlayerNotFoundException; +import dev.plex.command.source.CommandSource; import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; import dev.plex.rank.enums.Rank; import dev.plex.util.PlexUtils; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.command.*; import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; import java.util.Arrays; +import java.util.List; import java.util.UUID; -public abstract class PlexCommand extends Command +public abstract class PlexCommand extends Command implements TabExecutor, IPlexCommand { protected static Plex plugin = Plex.get(); @@ -34,18 +34,19 @@ public abstract class PlexCommand extends Command private final CommandPermissions perms; private final Rank level; + private CommandSource sender; private final RequiredCommandSource commandSource; - public PlexCommand() + public PlexCommand(String name) { - super(""); + super(name); this.params = getClass().getAnnotation(CommandParameters.class); this.perms = getClass().getAnnotation(CommandPermissions.class); - setName(this.params.name()); - setLabel(this.params.name()); + setName(name); + setLabel(name); setDescription(params.description()); - setUsage(params.usage().replace("", this.params.name())); + setUsage(params.usage().replace("", name)); if (params.aliases().split(",").length > 0) { setAliases(Arrays.asList(params.aliases().split(","))); @@ -56,11 +57,16 @@ public abstract class PlexCommand extends Command getMap().register("plex", this); } - protected abstract Component execute(CommandSender sender, String[] args); - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String label, String[] args) + public boolean execute(CommandSender sender, String label, String[] args) + { + onCommand(sender, this, label, args); + return true; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (!matches(label)) { @@ -81,6 +87,7 @@ public abstract class PlexCommand extends Command } Player player = (Player)sender; + this.sender = new CommandSource(player); PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(player.getUniqueId()); if (!plexPlayer.getRankFromString().isAtLeast(getLevel())) { @@ -90,23 +97,62 @@ public abstract class PlexCommand extends Command } try { - Component component = this.execute(sender, args); - if (component != null) - { - sender.sendMessage(component); - } + this.sender = new CommandSource(sender); + execute(this.sender, args); } catch (CommandArgumentException ex) { - send(sender, getUsage().replace("", getLabel())); + send(getUsage().replace("", getLabel())); } catch (PlayerNotFoundException | CommandFailException ex) { - send(sender, ex.getMessage()); + send(ex.getMessage()); + } + catch (ConsoleMustDefinePlayerException ex) + { + send(tl("consoleMustDefinePlayer")); + } + catch (ConsoleOnlyException ex) + { + send(tl("consoleOnly")); } return true; } + @Override + public List tabComplete(CommandSender sender, String alias, String[] args) + { + if (!matches(alias)) + { + return ImmutableList.of(); + } + if (sender instanceof Player player) + { + + this.sender = new CommandSource(player); + + PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(player.getUniqueId()); + if (plexPlayer.getRankFromString().isAtLeast(getLevel())) + { + return onTabComplete(this.sender, args); + } + else + { + return ImmutableList.of(); + } + } + else + { + this.sender = new CommandSource(sender); + return onTabComplete(this.sender, args); + } + } + + @Override + public List onTabComplete(CommandSender sender, Command cmd, String label, String[] args) + { + return tabComplete(sender, label, args); + } private boolean matches(String label) { @@ -127,6 +173,11 @@ public abstract class PlexCommand extends Command return false; } + protected void send(String s, CommandSource sender) + { + sender.send(s); + } + protected void send(String s, Player player) { player.sendMessage(s); @@ -143,35 +194,28 @@ public abstract class PlexCommand extends Command return Plex.get().getRankManager().isAdmin(plexPlayer); } - protected boolean isConsole(CommandSender sender) + protected boolean isConsole() { return !(sender instanceof Player); } - protected Component tl(String s, Object... objects) + protected String tl(String s, Object... objects) { - return LegacyComponentSerializer.legacyAmpersand().deserialize(PlexUtils.tl(s, objects)); + return PlexUtils.tl(s, objects); } - protected Component usage(String s) + protected String usage(String s) { - return Component.text("Correct Usage: ").color(NamedTextColor.YELLOW) - .append(Component.text(s).color(NamedTextColor.GRAY)); + return ChatColor.YELLOW + "Correct Usage: " + ChatColor.GRAY + s; } - protected void send(Audience audience, String s) + protected void send(String s) { - audience.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(s)); - } - - protected void send(Audience audience, Component component) - { - audience.sendMessage(component); - } - - protected Component fromString(String s) - { - return LegacyComponentSerializer.legacyAmpersand().deserialize(s); + if (sender == null) + { + return; + } + send(s, sender); } protected Player getNonNullPlayer(String name) @@ -210,7 +254,7 @@ public abstract class PlexCommand extends Command World world = Bukkit.getWorld(name); if (world == null) { - throw new CommandFailException(PlexUtils.tl("worldNotFound")); + throw new CommandFailException(tl("worldNotFound")); } return world; }