# Conflicts:
#	src/main/java/dev/plex/command/PlexCommand.java
This commit is contained in:
spacerocket62 2022-01-26 21:29:53 -08:00
commit 13eb6e2ef9
4 changed files with 179 additions and 135 deletions

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

10
gradlew vendored Normal file → Executable file
View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# Copyright © 2015-2021 the original authors. # Copyright © 2015-2021 the original authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with 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 # Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features: # requires all of these POSIX shell features:
# * functions; # * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»; # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»; # * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit». # * various built-in commands including «command», «set», and «ulimit».
# #
# Important for patching: # Important for patching:
# #

178
gradlew.bat vendored
View File

@ -1,89 +1,89 @@
@rem @rem
@rem Copyright 2015 the original author or authors. @rem Copyright 2015 the original author or authors.
@rem @rem
@rem Licensed under the Apache License, Version 2.0 (the "License"); @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 not use this file except in compliance with the License.
@rem You may obtain a copy of the License at @rem You may obtain a copy of the License at
@rem @rem
@rem https://www.apache.org/licenses/LICENSE-2.0 @rem https://www.apache.org/licenses/LICENSE-2.0
@rem @rem
@rem Unless required by applicable law or agreed to in writing, software @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 distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and @rem See the License for the specific language governing permissions and
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%" == "" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem Gradle startup script for Windows @rem Gradle startup script for Windows
@rem @rem
@rem ########################################################################## @rem ##########################################################################
@rem Set local scope for the variables with windows NT shell @rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=. if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter. @rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 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. @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" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe @rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if "%ERRORLEVEL%" == "0" goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo. echo.
echo Please set the JAVA_HOME variable in your environment to match the echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. echo location of your Java installation.
goto fail goto fail
:findJavaFromJavaHome :findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo. echo.
echo Please set the JAVA_HOME variable in your environment to match the echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. echo location of your Java installation.
goto fail goto fail
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd if "%ERRORLEVEL%"=="0" goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1 exit /b 1
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal
:omega :omega

View File

@ -1,5 +1,6 @@
package dev.plex.command; package dev.plex.command;
import com.google.common.collect.ImmutableList;
import dev.plex.Plex; import dev.plex.Plex;
import dev.plex.cache.DataUtils; import dev.plex.cache.DataUtils;
import dev.plex.cache.PlayerCache; 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.annotation.CommandPermissions;
import dev.plex.command.exception.CommandArgumentException; import dev.plex.command.exception.CommandArgumentException;
import dev.plex.command.exception.CommandFailException; 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.exception.PlayerNotFoundException;
import dev.plex.command.source.CommandSource;
import dev.plex.command.source.RequiredCommandSource; import dev.plex.command.source.RequiredCommandSource;
import dev.plex.player.PlexPlayer; import dev.plex.player.PlexPlayer;
import dev.plex.rank.enums.Rank; import dev.plex.rank.enums.Rank;
import dev.plex.util.PlexUtils; 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.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.*; import org.bukkit.command.*;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.UUID; 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(); protected static Plex plugin = Plex.get();
@ -34,18 +34,19 @@ public abstract class PlexCommand extends Command
private final CommandPermissions perms; private final CommandPermissions perms;
private final Rank level; private final Rank level;
private CommandSource sender;
private final RequiredCommandSource commandSource; private final RequiredCommandSource commandSource;
public PlexCommand() public PlexCommand(String name)
{ {
super(""); super(name);
this.params = getClass().getAnnotation(CommandParameters.class); this.params = getClass().getAnnotation(CommandParameters.class);
this.perms = getClass().getAnnotation(CommandPermissions.class); this.perms = getClass().getAnnotation(CommandPermissions.class);
setName(this.params.name()); setName(name);
setLabel(this.params.name()); setLabel(name);
setDescription(params.description()); setDescription(params.description());
setUsage(params.usage().replace("<command>", this.params.name())); setUsage(params.usage().replace("<command>", name));
if (params.aliases().split(",").length > 0) if (params.aliases().split(",").length > 0)
{ {
setAliases(Arrays.asList(params.aliases().split(","))); setAliases(Arrays.asList(params.aliases().split(",")));
@ -56,11 +57,16 @@ public abstract class PlexCommand extends Command
getMap().register("plex", this); getMap().register("plex", this);
} }
protected abstract Component execute(CommandSender sender, String[] args);
@Override @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)) if (!matches(label))
{ {
@ -81,6 +87,7 @@ public abstract class PlexCommand extends Command
} }
Player player = (Player)sender; Player player = (Player)sender;
this.sender = new CommandSource(player);
PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(player.getUniqueId()); PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(player.getUniqueId());
if (!plexPlayer.getRankFromString().isAtLeast(getLevel())) if (!plexPlayer.getRankFromString().isAtLeast(getLevel()))
{ {
@ -90,23 +97,62 @@ public abstract class PlexCommand extends Command
} }
try try
{ {
Component component = this.execute(sender, args); this.sender = new CommandSource(sender);
if (component != null) execute(this.sender, args);
{
sender.sendMessage(component);
}
} }
catch (CommandArgumentException ex) catch (CommandArgumentException ex)
{ {
send(sender, getUsage().replace("<command>", getLabel())); send(getUsage().replace("<command>", getLabel()));
} }
catch (PlayerNotFoundException | CommandFailException ex) 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; return true;
} }
@Override
public List<String> 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<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args)
{
return tabComplete(sender, label, args);
}
private boolean matches(String label) private boolean matches(String label)
{ {
@ -127,6 +173,11 @@ public abstract class PlexCommand extends Command
return false; return false;
} }
protected void send(String s, CommandSource sender)
{
sender.send(s);
}
protected void send(String s, Player player) protected void send(String s, Player player)
{ {
player.sendMessage(s); player.sendMessage(s);
@ -143,35 +194,28 @@ public abstract class PlexCommand extends Command
return Plex.get().getRankManager().isAdmin(plexPlayer); return Plex.get().getRankManager().isAdmin(plexPlayer);
} }
protected boolean isConsole(CommandSender sender) protected boolean isConsole()
{ {
return !(sender instanceof Player); 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) return ChatColor.YELLOW + "Correct Usage: " + ChatColor.GRAY + s;
.append(Component.text(s).color(NamedTextColor.GRAY));
} }
protected void send(Audience audience, String s) protected void send(String s)
{ {
audience.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(s)); if (sender == null)
} {
return;
protected void send(Audience audience, Component component) }
{ send(s, sender);
audience.sendMessage(component);
}
protected Component fromString(String s)
{
return LegacyComponentSerializer.legacyAmpersand().deserialize(s);
} }
protected Player getNonNullPlayer(String name) protected Player getNonNullPlayer(String name)
@ -210,7 +254,7 @@ public abstract class PlexCommand extends Command
World world = Bukkit.getWorld(name); World world = Bukkit.getWorld(name);
if (world == null) if (world == null)
{ {
throw new CommandFailException(PlexUtils.tl("worldNotFound")); throw new CommandFailException(tl("worldNotFound"));
} }
return world; return world;
} }