improved modularity

This commit is contained in:
thomas 2021-07-05 14:09:54 +02:00
parent 6060cbb995
commit d3dd37ebac
30 changed files with 124 additions and 755 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
# Project exclude paths
/target/
/.idea/

13
commandapi.iml Normal file
View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

41
pom.xml
View file

@ -5,45 +5,12 @@
<modelVersion>4.0.0</modelVersion>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<groupId>nl.iobyte</groupId>
<artifactId>commandapi</artifactId>
<version>1.1</version>
<repositories>
<repository>
<id>sk89q-repo</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.12.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-legacy</artifactId>
<version>6.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>6.1.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-core</artifactId>
<version>6.1.4-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<version>1.2</version>
</project>

View file

@ -1,28 +1,19 @@
package nl.iobyte.commandapi;
import javafx.util.Pair;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.interfaces.ICommandMiddleware;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import nl.iobyte.commandapi.objects.CommandMap;
import nl.iobyte.commandapi.objects.CommandSyntax;
import nl.iobyte.commandapi.interfaces.SubCommand;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import nl.iobyte.commandapi.objects.SubCommand;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.*;
public class CommandFactory implements CommandExecutor {
public class CommandFactory {
private final String name;
private final List<ICommandMiddleware> middlewares = new ArrayList<>();
private final CommandMap commandMap = new CommandMap();
private Plugin plugin;
public CommandFactory(String name) {
this.name = name;
@ -65,11 +56,11 @@ public class CommandFactory implements CommandExecutor {
}
/**
* Get SubCommand's available to CommandSender
* @param sender CommandSender
* Get SubCommand's available to ICommandExecutor
* @param sender ICommandExecutor
* @return List<SubCommand>
*/
public List<SubCommand> getApplicableSubCommands(CommandSender sender) {
public List<SubCommand> getApplicableSubCommands(ICommandExecutor sender) {
List<SubCommand> list = new ArrayList<>();
for(SubCommand subCommand : commandMap.getSubCommands()) {
if (subCommand.hasPermission() && !sender.hasPermission(subCommand.getPermission()))
@ -86,13 +77,11 @@ public class CommandFactory implements CommandExecutor {
/**
* When a command gets fired
* @param sender CommandSender
* @param cmd Command
* @param s String
* @param sender ICommandExecutor
* @param args []String
* @return Boolean
*/
public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) {
public boolean onCommand(ICommandExecutor sender, String[] args) {
if(args.length == 0)
args = new String[]{"help"};
@ -147,33 +136,17 @@ public class CommandFactory implements CommandExecutor {
int i = subCommand.getSyntaxList().indexOf(syntax);
List<Object> finalParsedArguments = parsedArguments;
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
if (sender instanceof Player) {
subCommand.onPlayerCommand((Player) sender, finalParsedArguments, i);
} else {
subCommand.onConsoleCommand(sender, finalParsedArguments, i);
}
});
subCommand.onCommand(sender, finalParsedArguments, i);
return true;
}
if(str != null) {
sender.sendMessage(ChatColor.RED +str);
sender.sendMessage("§4" +str);
return true;
}
sender.sendMessage(ChatColor.RED + "Usage: " + ChatColor.WHITE + syntaxList.get(0).getUsage());
sender.sendMessage("§4" + "Usage: " + "§f" + syntaxList.get(0).getUsage());
return true;
}
/**
* Register command
* @param plugin JavaPlugin
*/
public void registerCommand(JavaPlugin plugin) {
this.plugin = plugin;
plugin.getCommand(name).setExecutor(this);
}
}

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class BooleanArgument implements ICommandArgument<Boolean> {
@ -13,17 +12,17 @@ public class BooleanArgument implements ICommandArgument<Boolean> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid boolean "+ ChatColor.WHITE+args[0];
return "Invalid boolean "+ "§f" + args[0];
}
/**
* Check if argument is valid Boolean
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
switch (args[0].toLowerCase()) {
case "true":
case "false":
@ -35,12 +34,12 @@ public class BooleanArgument implements ICommandArgument<Boolean> {
/**
* Get Boolean passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public Boolean getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Boolean getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
return "true".equals(args[0].toLowerCase());
}

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.Arrays;
import java.util.List;
@ -20,28 +19,28 @@ public class EnumArgument implements ICommandArgument<Enum<?>> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid value "+ChatColor.WHITE+args[0]+ChatColor.RED+" for "+validArgumentHolders[0].name();
return "Invalid value "+"§f"+args[0]+"§4"+" for "+validArgumentHolders[0].name();
}
/**
* Check if argument is valid Enum
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
return new ArgumentCheck(Arrays.stream(validArgumentHolders).map(Enum::toString).anyMatch(args[0]::equalsIgnoreCase), 1);
}
/**
* Get Enum passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Enum
*/
public Enum<?> getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Enum<?> getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
return Arrays.stream(validArgumentHolders).filter(enumVariable -> enumVariable.toString().equalsIgnoreCase(args[0])).findFirst().orElse(null);
}

View file

@ -1,55 +0,0 @@
package nl.iobyte.commandapi.arguments;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import java.util.Arrays;
import java.util.List;
public class MaterialArgument implements ICommandArgument<Enum<?>> {
private final Material[] validArgumentHolders;
public MaterialArgument(Material... validArgumentHolders) {
this.validArgumentHolders = validArgumentHolders;
}
/**
* Message to display when giving an error
* @return String
*/
public String getMessage(String[] args) {
return "No material with name: "+args[0];
}
/**
* Check if argument is valid Material
* @param sender CommandSender
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
Material material = Material.getMaterial(args[0]);
if(material == null)
return new ArgumentCheck(false, 0);
if(validArgumentHolders == null || validArgumentHolders.length == 0)
return new ArgumentCheck(true, 1);
return new ArgumentCheck(Arrays.stream(validArgumentHolders).anyMatch(m -> m == material), 1);
}
/**
* Get Material passed by command
* @param sender CommandSender
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Material
*/
public Material getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
return Material.getMaterial(args[0]);
}
}

View file

@ -2,7 +2,7 @@ package nl.iobyte.commandapi.arguments;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class MessageArgument implements ICommandArgument<String> {
@ -17,12 +17,12 @@ public class MessageArgument implements ICommandArgument<String> {
/**
* Check if argument is valid String
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
if(!args[0].startsWith("\""))
return new ArgumentCheck(true, 1);
@ -35,12 +35,12 @@ public class MessageArgument implements ICommandArgument<String> {
/**
* Get String passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return String
*/
public String getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public String getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
return String.join(" ", args).replace("\"", "");
}

View file

@ -1,43 +0,0 @@
package nl.iobyte.commandapi.arguments;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.List;
public class PlayerArgument implements ICommandArgument<Player> {
/**
* Message to display when giving an error
* @return String
*/
public String getMessage(String[] args) {
return "No player found with name: "+ ChatColor.WHITE+args[0];
}
/**
* Check if argument is valid Player
* @param sender CommandSender
* @param args Argument passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
return new ArgumentCheck(Bukkit.getPlayer(args[0]) != null, 1);
}
/**
* Get Player passed by command
* @param sender CommandSender
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Player
*/
public Player getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
return Bukkit.getPlayer(args[0]);
}
}

View file

@ -1,44 +0,0 @@
package nl.iobyte.commandapi.arguments;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import nl.iobyte.commandapi.objects.SpigotPlayerSelector;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.List;
public class PlayersArgument implements ICommandArgument<List<Player>> {
/**
* Message to display when giving an error
* @return String
*/
public String getMessage(String[] args) {
return "No player(s) found for: "+ ChatColor.WHITE+args[0];
}
/**
* Check if argument is valid Player
* @param sender CommandSender
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
List<Player> players = new SpigotPlayerSelector(args[0]).getPlayers(sender);
return new ArgumentCheck(players != null && !players.isEmpty(), 1);
}
/**
* Get Player passed by command
* @param sender CommandSender
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Player
*/
public List<Player> getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
return new SpigotPlayerSelector(args[0]).getPlayers(sender);
}
}

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.Arrays;
import java.util.List;
@ -20,17 +19,17 @@ public class StringArgument implements ICommandArgument<String> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid string: "+ ChatColor.WHITE+args[0];
return "Invalid string: "+ "§f"+args[0];
}
/**
* Check if argument is valid String
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
if(validArguments == null || validArguments.length == 0)
return new ArgumentCheck(true, 1);
@ -39,12 +38,12 @@ public class StringArgument implements ICommandArgument<String> {
/**
* Get String passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return String
*/
public String getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public String getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
return args[0];
}

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments.array;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class IntegerArrayArgument implements ICommandArgument<Integer[]> {
@ -13,11 +12,11 @@ public class IntegerArrayArgument implements ICommandArgument<Integer[]> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid integer array: "+ ChatColor.WHITE+args[0];
return "Invalid integer array: "+ "§f"+args[0];
}
@Override
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
String[] items = args[0].replace("[", "").replace("]", "").split(",");
try {
for(String item : items)
@ -30,7 +29,7 @@ public class IntegerArrayArgument implements ICommandArgument<Integer[]> {
}
@Override
public Integer[] getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Integer[] getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
String[] items = args[0].replace("[", "").replace("]", "").split(",");
Integer[] results = new Integer[items.length];
for(int i = 0; i < items.length; i++)

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments.array;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class StringArrayArgument implements ICommandArgument<String[]> {
@ -13,11 +12,11 @@ public class StringArrayArgument implements ICommandArgument<String[]> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid string array: "+ ChatColor.WHITE+args[0];
return "Invalid string array: "+ "§f"+args[0];
}
@Override
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
if(!args[0].startsWith("[\"") || !args[0].endsWith("\"]"))
return new ArgumentCheck(false, 0);
@ -25,7 +24,7 @@ public class StringArrayArgument implements ICommandArgument<String[]> {
}
@Override
public String[] getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public String[] getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
return args[0].replace("[", "").replace("]", "").replaceAll("\"", "").split(",");
}

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments.number;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class DoubleArgument implements ICommandArgument<Double> {
@ -13,17 +12,17 @@ public class DoubleArgument implements ICommandArgument<Double> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid double: "+ ChatColor.WHITE+args[0];
return "Invalid double: "+ "§f"+args[0];
}
/**
* Check if argument is valid Double
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
Double.parseDouble(args[0]);
return new ArgumentCheck(true, 1);
@ -34,12 +33,12 @@ public class DoubleArgument implements ICommandArgument<Double> {
/**
* Get Double passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Double
*/
public Double getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Double getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
return Double.parseDouble(args[0]);
} catch (Exception e) {

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments.number;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class FloatArgument implements ICommandArgument<Float> {
@ -13,17 +12,17 @@ public class FloatArgument implements ICommandArgument<Float> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid float: "+ ChatColor.WHITE+args[0];
return "Invalid float: "+ "§f"+args[0];
}
/**
* Check if argument is valid Float
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
Float.parseFloat(args[0]);
return new ArgumentCheck(true, 1);
@ -34,12 +33,12 @@ public class FloatArgument implements ICommandArgument<Float> {
/**
* Get Float passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Float
*/
public Float getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Float getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
return Float.parseFloat(args[0]);
} catch (Exception e) {

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments.number;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class IntegerArgument implements ICommandArgument<Integer> {
@ -13,17 +12,17 @@ public class IntegerArgument implements ICommandArgument<Integer> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid integer: "+ ChatColor.WHITE+args[0];
return "Invalid integer: "+ "§f"+args[0];
}
/**
* Check if argument is valid Integer
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
Integer.parseInt(args[0]);
return new ArgumentCheck(true, 1);
@ -34,12 +33,12 @@ public class IntegerArgument implements ICommandArgument<Integer> {
/**
* Get Integer passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Integer
*/
public Integer getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Integer getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
return Integer.parseInt(args[0]);
} catch (Exception e) {

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments.number;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class LongArgument implements ICommandArgument<Long> {
@ -13,17 +12,17 @@ public class LongArgument implements ICommandArgument<Long> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid long: "+ ChatColor.WHITE+args[0];
return "Invalid long: "+ "§f"+args[0];
}
/**
* Check if argument is valid Long
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
Long.parseLong(args[0]);
return new ArgumentCheck(true, 1);
@ -34,12 +33,12 @@ public class LongArgument implements ICommandArgument<Long> {
/**
* Get Long passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Long
*/
public Long getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Long getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
return Long.parseLong(args[0]);
} catch (Exception e) {

View file

@ -2,8 +2,7 @@ package nl.iobyte.commandapi.arguments.number;
import nl.iobyte.commandapi.interfaces.ICommandArgument;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public class ShortArgument implements ICommandArgument<Short> {
@ -13,17 +12,17 @@ public class ShortArgument implements ICommandArgument<Short> {
* @return String
*/
public String getMessage(String[] args) {
return "Invalid short: "+ ChatColor.WHITE+args[0];
return "Invalid short: "+ "§f"+args[0];
}
/**
* Check if argument is valid Short
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Boolean
*/
public ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
Short.parseShort(args[0]);
return new ArgumentCheck(true, 1);
@ -34,12 +33,12 @@ public class ShortArgument implements ICommandArgument<Short> {
/**
* Get Short passed by command
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Short
*/
public Short getArgument(CommandSender sender, String[] args, List<Object> previousArguments) {
public Short getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments) {
try {
return Short.parseShort(args[0]);
} catch (Exception e) {

View file

@ -1,7 +1,7 @@
package nl.iobyte.commandapi.interfaces;
import nl.iobyte.commandapi.objects.ArgumentCheck;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.List;
public interface ICommandArgument<T> {
@ -14,20 +14,20 @@ public interface ICommandArgument<T> {
/**
* Check if valid argument
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return ArgumentCheck
*/
ArgumentCheck checkArgument(CommandSender sender, String[] args, List<Object> previousArguments);
ArgumentCheck checkArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments);
/**
* Get object of argument
* @param sender CommandSender
* @param sender ICommandExecutor
* @param args Arguments passed by Command
* @param previousArguments Previous arguments
* @return Object of type T
*/
T getArgument(CommandSender sender, String[] args, List<Object> previousArguments);
T getArgument(ICommandExecutor sender, String[] args, List<Object> previousArguments);
}

View file

@ -0,0 +1,13 @@
package nl.iobyte.commandapi.interfaces;
public interface ICommandExecutor {
boolean isPlayer();
boolean hasPermission(String str);
void sendMessage(String str);
Object getOriginal();
}

View file

@ -1,9 +1,9 @@
package nl.iobyte.commandapi.interfaces;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.objects.SubCommand;
public interface ICommandMiddleware {
boolean continueCommand(CommandSender sender, SubCommand command);
boolean continueCommand(ICommandExecutor sender, SubCommand command);
}

View file

@ -1,15 +0,0 @@
package nl.iobyte.commandapi.middlewares;
import nl.iobyte.commandapi.interfaces.ICommandMiddleware;
import nl.iobyte.commandapi.interfaces.SubCommand;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class NoPlayerMiddleware implements ICommandMiddleware {
@Override
public boolean continueCommand(CommandSender sender, SubCommand command) {
return !(sender instanceof Player);
}
}

View file

@ -1,9 +1,8 @@
package nl.iobyte.commandapi.middlewares;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import nl.iobyte.commandapi.interfaces.ICommandMiddleware;
import nl.iobyte.commandapi.interfaces.SubCommand;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import nl.iobyte.commandapi.objects.SubCommand;
public class PermissionMiddleware implements ICommandMiddleware {
@ -18,16 +17,16 @@ public class PermissionMiddleware implements ICommandMiddleware {
}
@Override
public boolean continueCommand(CommandSender sender, SubCommand command) {
public boolean continueCommand(ICommandExecutor sender, SubCommand command) {
if(command.hasPermission() && !sender.hasPermission(command.getPermission())) {
sender.sendMessage(ChatColor.RED + "You don't have permission to use this command");
sender.sendMessage("§4" + "You don't have permission to use this command");
return false;
}
if(permissions != null && permissions.length != 0) {
for (String permission : permissions) {
if (!sender.hasPermission(permission)) {
sender.sendMessage(ChatColor.RED + "You don't have permission to use this command");
sender.sendMessage("§4" + "You don't have permission to use this command");
return false;
}
}

View file

@ -1,15 +0,0 @@
package nl.iobyte.commandapi.middlewares;
import nl.iobyte.commandapi.interfaces.ICommandMiddleware;
import nl.iobyte.commandapi.interfaces.SubCommand;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class PlayerMiddleware implements ICommandMiddleware {
@Override
public boolean continueCommand(CommandSender sender, SubCommand command) {
return sender instanceof Player;
}
}

View file

@ -1,6 +1,5 @@
package nl.iobyte.commandapi.objects;
import nl.iobyte.commandapi.interfaces.SubCommand;
import java.util.*;
public class CommandMap {

View file

@ -1,153 +0,0 @@
package nl.iobyte.commandapi.objects;
import nl.iobyte.commandapi.worldguard.WGManager;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.BlockCommandSender;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* Use selectors in commands!
*
* @author Mindgamesnl
*
* Code from
* https://github.com/Mindgamesnl/OpenAudioMc/blob/master/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/players/objects/SpigotPlayerSelector.java
*/
public class SpigotPlayerSelector {
private final String selector;
public SpigotPlayerSelector(String selector) {
this.selector = selector;
}
/**
* this turns selectors like @a[r=5] into a usable list, since
* 1.13 spigot removed this feature, FOR SOME REASON.. thanks guys..
*
* @param commandSender the sender
* @return players following the selector
*/
public List<Player> getPlayers(CommandSender commandSender) {
List<Player> players = new ArrayList<>();
if (selector.startsWith("@p")) {
//get Location
Location standPoint = getLocation(commandSender);
if (getArgument("r").length() != 0) {
int radius = Integer.parseInt(getArgument("r"));
Player nearest = Bukkit.getOnlinePlayers().stream()
.filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName()))
.min(Comparator.comparing(player -> player.getLocation().distance(standPoint)))
.filter(player -> radius > player.getLocation().distance(standPoint))
.get();
players.add(nearest);
}
if (getArgument("distance").length() != 0) {
int distance = Integer.parseInt(getArgument("distance"));
Player nearest = Bukkit.getOnlinePlayers().stream()
.filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName()))
.min(Comparator.comparing(player -> player.getLocation().distance(standPoint)))
.filter(player -> distance > player.getLocation().distance(standPoint))
.get();
players.add(nearest);
} else {
Bukkit.getOnlinePlayers().stream()
.filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName()))
.min(Comparator.comparing(player -> player.getLocation().distance(standPoint)))
.ifPresent(players::add);
}
} else if (selector.startsWith("@a")) {
//everyone
Location standPoint = getLocation(commandSender);
if(getArgument("region").length() != 0) {
WGManager manager = WGManager.getInstance();
String targetRegion = getArgument("region");
for (Player player : Bukkit.getOnlinePlayers()) {
manager.getApplicableRegionSet(player.getLocation(standPoint)).forEach(region -> {
if (region.getId().equalsIgnoreCase(targetRegion))
players.add(player);
});
}
} else if (getArgument("r").length() != 0) {
int radius = Integer.parseInt(getArgument("r"));
players.addAll(Bukkit.getOnlinePlayers().stream()
.filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName()))
.filter(player -> radius > player.getLocation().distance(standPoint))
.collect(Collectors.toList()));
} else if (getArgument("distance").length() != 0) {
int distance = Integer.parseInt(getArgument("distance"));
players.addAll(Bukkit.getOnlinePlayers().stream()
.filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName()))
.filter(player -> distance > player.getLocation().distance(standPoint))
.collect(Collectors.toList()));
}
else {
players.addAll(Bukkit.getOnlinePlayers().stream()
.filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName()))
.collect(Collectors.toList()));
}
} else if (selector.length() <= 16) {
//player
Player player = Bukkit.getPlayer(selector);
if (player != null)
players.add(player);
}
return players;
}
/**
* attempt to parse the location
*
* @param commandSender the sender
* @return the location or null
*/
private Location getLocation(CommandSender commandSender) {
Location initialLocation = new Location(Bukkit.getWorlds().get(0), 0, 0, 0);
if (commandSender instanceof Player) {
initialLocation = ((Player) commandSender).getLocation();
} else if (commandSender instanceof BlockCommandSender) {
initialLocation = ((BlockCommandSender) commandSender).getBlock().getLocation();
}
if (!getArgument("x").equals("") && !getArgument("y").equals("") && !getArgument("z").equals("")) {
try {
int x = Integer.parseInt(getArgument("x"));
int y = Integer.parseInt(getArgument("y"));
int z = Integer.parseInt(getArgument("z"));
return new Location(initialLocation.getWorld(), x, y, z);
} catch (Exception e) {
return initialLocation;
}
}
return initialLocation;
}
private String getArgument(String key) {
StringBuilder result = new StringBuilder();
String[] arguments = selector.split(key + "=");
if (arguments.length == 1) return "";
for (byte type : arguments[1].getBytes()) {
char element = (char) type;
if (element == ',' || element == ']') {
return result.toString();
} else {
result.append(element);
}
}
return result.toString();
}
}

View file

@ -1,8 +1,6 @@
package nl.iobyte.commandapi.interfaces;
package nl.iobyte.commandapi.objects;
import nl.iobyte.commandapi.objects.CommandSyntax;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import nl.iobyte.commandapi.interfaces.ICommandExecutor;
import java.util.ArrayList;
import java.util.List;
@ -56,13 +54,13 @@ public abstract class SubCommand {
/**
* Get all Syntax's sender can use
* @param sender CommandSender
* @param sender ICommandExecutor
* @return List<CommandSyntax>
*/
public List<CommandSyntax> getApplicableSyntaxList(CommandSender sender) {
public List<CommandSyntax> getApplicableSyntaxList(ICommandExecutor sender) {
List<CommandSyntax> list = new ArrayList<>();
for(CommandSyntax syntax : syntaxList) {
if(!syntax.isConsoleAllowed() && !(sender instanceof Player))
if(!syntax.isConsoleAllowed() && !sender.isPlayer())
continue;
list.add(syntax);
@ -91,19 +89,11 @@ public abstract class SubCommand {
}
/**
* When player executes command
* @param player Player
* When executing command
* @param executor ICommandExecutor
* @param args Object[]
* @param syntaxUsed Integer
*/
public abstract void onPlayerCommand(Player player, List<Object> args, int syntaxUsed);
/**
* When console executes command
* @param sender CommandSender
* @param args Object[]
* @param syntaxUsed Integer
*/
public abstract void onConsoleCommand(CommandSender sender, List<Object> args, int syntaxUsed);
public abstract void onCommand(ICommandExecutor executor, List<Object> args, int syntaxUsed);
}

View file

@ -1,35 +0,0 @@
package nl.iobyte.commandapi.worldguard;
import org.bukkit.Bukkit;
import java.util.HashMap;
public class Reflection {
private static final HashMap<String, Class<?>> classes = new HashMap<>();
private static final String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
public static Class<?> getCraftBukkitClass(String name) {
return getClass("org.bukkit.craftbukkit." + version + "." + name);
}
public static Class<?> getNMSClass(String name) {
return getClass("net.minecraft.server." + version + "." + name);
}
public static Class<?> getClass(String path) {
if(classes.containsKey(path))
return classes.get(path);
try {
Class<?> clazz = Class.forName(path);
classes.put(path, clazz);
return clazz;
} catch (ClassNotFoundException e) {
e.printStackTrace();
classes.put(path, null);
return null;
}
}
}

View file

@ -1,197 +0,0 @@
package nl.iobyte.commandapi.worldguard;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.plugin.Plugin;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class WGManager {
private static String wgVerStr = null;
private static WGManager instance = null;
public static WGManager getInstance() {
if (instance == null) {
instance = new WGManager();
}
return instance;
}
public WorldGuardPlugin getWorldGuard() {
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
if ((!(plugin instanceof WorldGuardPlugin)))
return null;
return (WorldGuardPlugin) plugin;
}
public WorldEditPlugin getWorldEdit() {
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
if ((!(plugin instanceof WorldEditPlugin)))
return null;
return (WorldEditPlugin) plugin;
}
public ProtectedRegion getLowerCasePlot(World w, String regionname) {
for (ProtectedRegion pr : getRegionManager(w).getRegions().values())
if (pr.getId().toLowerCase().equalsIgnoreCase(regionname))
return pr;
return null;
}
public RegionManager getRegionManager(World w) {
if (getWgVer().contains("7.")) {
try {
Class<?> wgClass = Reflection.getClass("com.sk89q.worldguard.WorldGuard");
Object instance = wgClass.getDeclaredMethod("getInstance").invoke(null);
Class<?> wgInstanceClass = instance.getClass();
Object platform = wgInstanceClass.getDeclaredMethod("getPlatform").invoke(instance);
Class<?> wgPlatformClass = platform.getClass();
Object regionContainer = wgPlatformClass.getDeclaredMethod("getRegionContainer").invoke(platform);
Class<?> wgRegionContainer = regionContainer.getClass();
return (RegionManager) wgRegionContainer.getSuperclass()
.getMethod("get", com.sk89q.worldedit.world.World.class)
.invoke(regionContainer, new BukkitWorld(w));
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
return getWorldGuard().getRegionManager(w);
}
return null;
}
@SuppressWarnings("unchecked")
public List<ProtectedRegion> getRegions(Location loc) {
ArrayList<ProtectedRegion> regions = new ArrayList<>();
if (getWgVer().contains("7.")) {
try {
RegionManager mngr = getRegionManager(loc.getWorld());
Class<?> blockVector3 = Reflection.getClass("com.sk89q.worldedit.math.BlockVector3");
Method applicableRegions = mngr.getClass().getDeclaredMethod("getApplicableRegions", blockVector3);
Method blockVectorAt = blockVector3.getDeclaredMethod("at", double.class, double.class, double.class);
Object blockVector = blockVectorAt.invoke(null, loc.getX(), loc.getY(), loc.getZ());
Object regionSet = applicableRegions.invoke(mngr, blockVector);
Method getregions = regionSet.getClass().getMethod("getRegions");
regions = new ArrayList<>(((HashSet<ProtectedRegion>) getregions.invoke(regionSet)));
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
regions = new ArrayList<>(getRegionManager(loc.getWorld())
.getApplicableRegions(new Vector(loc.getX(), loc.getY(), loc.getZ())).getRegions());
}
regions.sort(new WGRegionCompare());
return regions;
}
public ProtectedCuboidRegion getProtectedCubiodRegion(String regionname, Location loc1, Location loc2) {
if (getWgVer().contains("7.")) {
try {
Object bvloc1 = getBlockVectorV3(loc1);
Object bvloc2 = getBlockVectorV3(loc2);
Class<?> prCbRg = Reflection.getClass("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion");
return (ProtectedCuboidRegion) prCbRg.getConstructor(String.class, bvloc1.getClass(), bvloc2.getClass())
.newInstance(regionname, bvloc1, bvloc2);
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
return new ProtectedCuboidRegion(regionname,
new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()),
new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()));
}
return null;
}
public Object getBlockVectorV3(Location loc) throws Exception {
Class<?> blockVector3 = Reflection.getClass("com.sk89q.worldedit.math.BlockVector3");
Method blockVectorAt = blockVector3.getDeclaredMethod("at", double.class, double.class, double.class);
return blockVectorAt.invoke(null, loc.getX(), loc.getY(), loc.getZ());
}
public FlagRegistry getFlagRegistry() {
if (getWgVer().contains("7.")) {
try {
Class<?> wgClass = Reflection.getClass("com.sk89q.worldguard.WorldGuard");
Object instance = wgClass.getDeclaredMethod("getInstance").invoke(null);
Class<?> wgInstanceClass = instance.getClass();
Method declaredMethod = wgInstanceClass.getDeclaredMethod("getFlagRegistry");
return (FlagRegistry) declaredMethod.invoke(instance);
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
} else {
return getWorldGuard().getFlagRegistry();
}
}
public ApplicableRegionSet getApplicableRegionSet(Location loc) {
if (getWgVer().contains("7.")) {
try {
RegionManager mngr = getRegionManager(loc.getWorld());
Class<?> blockVector3 = Reflection.getClass("com.sk89q.worldedit.math.BlockVector3");
Method applicableRegions = mngr.getClass().getDeclaredMethod("getApplicableRegions", blockVector3);
Method blockVectorAt = blockVector3.getDeclaredMethod("at", double.class, double.class, double.class);
Object blockVector = blockVectorAt.invoke(null, loc.getX(), loc.getY(), loc.getZ());
Object regionSet = applicableRegions.invoke(mngr, blockVector);
return (ApplicableRegionSet) regionSet;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
} else {
return getRegionManager(loc.getWorld()).getApplicableRegions(new Vector(loc.getX(), loc.getY(), loc.getZ()));
}
}
public String getWgVer() {
if (wgVerStr == null)
wgVerStr = Bukkit.getPluginManager().getPlugin("WorldGuard").getDescription().getVersion();
return wgVerStr;
}
}

View file

@ -1,19 +0,0 @@
package nl.iobyte.commandapi.worldguard;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import java.util.Comparator;
public class WGRegionCompare implements Comparator<ProtectedRegion> {
@Override
public int compare(ProtectedRegion o1, ProtectedRegion o2) {
if (o1.getPriority() == o2.getPriority()) {
return 0;
} else if (o1.getPriority() < o2.getPriority()) {
return 1;
}
return -1;
}
}