Skip to content

Commit 3edaaae

Browse files
committed
[+] Added providers, and made the api actually better pog
1 parent 9cd7dc9 commit 3edaaae

15 files changed

+189
-28
lines changed

src/main/java/xyz/damt/command/CommandHandler.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.HashMap;
1212
import java.util.Map;
1313

14-
@Getter
1514
public class CommandHandler {
1615

1716
@Getter
@@ -30,16 +29,17 @@ public class CommandHandler {
3029
*/
3130

3231
public CommandHandler(JavaPlugin javaPlugin) {
32+
instance = this;
3333
this.javaPlugin = javaPlugin;
3434

35-
this.commandProviderHandler = new CommandProviderHandler();
35+
this.commandProviderHandler = new CommandProviderHandler(this);
3636
this.commandRegistery = new CommandRegistery(javaPlugin);
3737
}
3838

3939
/**
4040
* Binds a class to a command provider
4141
*
42-
* @param clazz class to bind
42+
* @param clazz class to bind
4343
* @param commandProvider command provider
4444
* @return {@link CommandHandler}
4545
*/
@@ -69,7 +69,7 @@ public final Command getCommand(String name) {
6969
*/
7070

7171
public final CommandHandler register(Object object, String name) {
72-
commandMap.put(name, new CommandFinder(object).getCommand(name));
72+
commandMap.put(name, new CommandFinder(object, commandProviderHandler).getCommand(name));
7373
return this;
7474
}
7575

@@ -83,7 +83,7 @@ public final CommandHandler register(Object object, String name) {
8383

8484
public final CommandHandler register(Object... objects) {
8585
for (Object object : objects) {
86-
CommandFinder commandFinder = new CommandFinder(object);
86+
CommandFinder commandFinder = new CommandFinder(object, commandProviderHandler);
8787
commandFinder.getCommands().forEach(command -> commandMap.put(command.getName(), command));
8888
}
8989
return this;
@@ -101,4 +101,13 @@ public final CommandHandler registerCommands() {
101101
return this;
102102
}
103103

104+
/**
105+
* Gets the java plugin
106+
*
107+
* @return {@link JavaPlugin}
108+
*/
109+
110+
public JavaPlugin getJavaPlugin() {
111+
return javaPlugin;
112+
}
104113
}

src/main/java/xyz/damt/command/command/CommandFinder.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.bukkit.entity.Player;
44
import xyz.damt.command.annotation.Permission;
55
import xyz.damt.command.annotation.Sender;
6+
import xyz.damt.command.provider.CommandProviderHandler;
67

78
import java.lang.reflect.Method;
89
import java.lang.reflect.Parameter;
@@ -13,6 +14,7 @@
1314
public class CommandFinder {
1415

1516
private final Object object;
17+
private final CommandProviderHandler commandProviderHandler;
1618
private final List<Command> commands = new ArrayList<>();
1719

1820
/**
@@ -22,8 +24,9 @@ public class CommandFinder {
2224
* @param object {@link Object}
2325
*/
2426

25-
public CommandFinder(Object object) {
27+
public CommandFinder(Object object, CommandProviderHandler commandProviderHandler) {
2628
this.object = object;
29+
this.commandProviderHandler = commandProviderHandler;
2730

2831
this.init();
2932
this.edit();
@@ -105,7 +108,7 @@ private final void init() {
105108
if (senderAnnotation != null) {
106109
command.setPlayer(parameter.getType().equals(Player.class));
107110
} else {
108-
command.getCommandParameters().add(new CommandParameter(command, parameter));
111+
command.getCommandParameters().add(new CommandParameter(command, parameter, commandProviderHandler));
109112
}
110113
}
111114

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package xyz.damt.command.command;
22

33
import lombok.Getter;
4-
import xyz.damt.command.CommandHandler;
4+
import lombok.SneakyThrows;
55
import xyz.damt.command.annotation.Name;
6+
import xyz.damt.command.exception.CommandParameterException;
67
import xyz.damt.command.provider.CommandProvider;
8+
import xyz.damt.command.provider.CommandProviderHandler;
79

810
import java.lang.reflect.Parameter;
911

@@ -12,25 +14,32 @@ public class CommandParameter {
1214

1315
private final Parameter parameter;
1416
private final Command command;
17+
private final CommandProviderHandler commandProviderHandler;
1518

1619
private CommandProvider<?> commandProvider;
1720
private String name;
1821

19-
public CommandParameter(Command command, Parameter parameter) {
22+
@SneakyThrows
23+
public CommandParameter(Command command, Parameter parameter, CommandProviderHandler commandProviderHandler) {
2024
this.parameter = parameter;
2125
this.command = command;
26+
this.commandProviderHandler = commandProviderHandler;
2227

2328
this.init();
2429
}
2530

26-
private final void init() {
31+
private final void init() throws CommandParameterException {
2732
Name name = parameter.getAnnotation(Name.class);
2833

2934
if (name == null)
3035
this.name = parameter.getName();
3136
else this.name = name.value();
3237

33-
this.commandProvider = CommandHandler.getInstance().getCommandProviderHandler().getProvider(parameter);
38+
this.commandProvider = commandProviderHandler.getProvider(parameter);
39+
40+
if (commandProvider == null)
41+
throw new CommandParameterException("The command parameter '" + parameter.getType().getSimpleName() + "' for command " + command
42+
.getName() + " does not exist!");
3443
}
3544

3645
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package xyz.damt.command.exception;
2+
3+
public class CommandParameterException extends Exception {
4+
5+
public CommandParameterException(String message) {
6+
super(message);
7+
}
8+
9+
}

src/main/java/xyz/damt/command/executor/CommandExecutor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import java.util.Arrays;
99
import java.util.Collections;
10-
import java.util.LinkedList;
1110
import java.util.List;
1211

1312
public class CommandExecutor extends BukkitCommand {

src/main/java/xyz/damt/command/provider/CommandProvider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@
33
import xyz.damt.command.command.CommandParameter;
44
import xyz.damt.command.exception.CommandProviderNullException;
55

6+
import java.util.Collections;
67
import java.util.List;
78

89
public interface CommandProvider<T> {
910

11+
1012
T provide(String s) throws CommandProviderNullException;
1113

12-
List<String> suggestions(CommandParameter commandParameter);
14+
default List<String> suggestions(CommandParameter commandParameter) {
15+
return Collections.emptyList();
16+
}
1317

1418
}

src/main/java/xyz/damt/command/provider/CommandProviderHandler.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,76 @@
11
package xyz.damt.command.provider;
22

3+
import org.bukkit.OfflinePlayer;
4+
import org.bukkit.entity.Player;
5+
import xyz.damt.command.CommandHandler;
6+
import xyz.damt.command.provider.impl.bukkit.OfflinePlayerCommandProvider;
7+
import xyz.damt.command.provider.impl.bukkit.PlayerCommandProvider;
8+
import xyz.damt.command.provider.impl.normal.*;
9+
310
import java.lang.reflect.Parameter;
411
import java.util.HashMap;
512
import java.util.Map;
613

714
public class CommandProviderHandler {
815

916
private final Map<Class<?>, CommandProvider<?>> commandProviderMap = new HashMap<>();
17+
private final CommandHandler commandHandler;
18+
19+
/**
20+
* Handles all command providers, and insures nothing goes wrong
21+
*
22+
* @param commandHandler instance of {@link CommandHandler}
23+
*/
24+
25+
public CommandProviderHandler(CommandHandler commandHandler) {
26+
this.commandHandler = commandHandler;
27+
this.init();
28+
}
29+
30+
/**
31+
* Registers all default and spigot providers
32+
*/
33+
34+
private final void init() {
35+
this.register(Integer.class, new IntegerCommandProvider());
36+
this.register(String.class, new StringCommandProvider());
37+
this.register(Float.class, new FloatCommandProvider());
38+
this.register(Boolean.class, new BooleanCommandProvider());
39+
this.register(Double.class, new DoubleCommandProvider());
40+
41+
this.register(Player.class, new PlayerCommandProvider(commandHandler.getJavaPlugin()));
42+
this.register(OfflinePlayer.class, new OfflinePlayerCommandProvider(commandHandler.getJavaPlugin()));
43+
}
44+
45+
/**
46+
* Registers a provider
47+
*
48+
* @param clazz class of the provider
49+
* @param commandProvider command provider of the provider
50+
*/
1051

1152
public final void register(Class<?> clazz, CommandProvider<?> commandProvider) {
1253
commandProviderMap.put(clazz, commandProvider);
1354
}
1455

56+
/**
57+
* Gets a provider from it's class
58+
*
59+
* @param clazz class to get the provider of
60+
* @return {@link CommandProvider}
61+
*/
62+
1563
public final CommandProvider<?> getProvider(Class<?> clazz) {
1664
return commandProviderMap.get(clazz);
1765
}
1866

67+
/**
68+
* Gets a provider from a parameter
69+
*
70+
* @param parameter parameter to get the provider from
71+
* @return {@link CommandProvider}
72+
*/
73+
1974
public final CommandProvider<?> getProvider(Parameter parameter) {
2075
return commandProviderMap.get(parameter.getType());
2176
}

src/main/java/xyz/damt/command/provider/impl/bukkit/OfflinePlayerProvider.java renamed to src/main/java/xyz/damt/command/provider/impl/bukkit/OfflinePlayerCommandProvider.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import org.bukkit.ChatColor;
44
import org.bukkit.OfflinePlayer;
55
import org.bukkit.entity.HumanEntity;
6-
import org.bukkit.entity.Player;
76
import org.bukkit.plugin.java.JavaPlugin;
87
import xyz.damt.command.command.CommandParameter;
98
import xyz.damt.command.exception.CommandProviderNullException;
@@ -12,11 +11,11 @@
1211
import java.util.List;
1312
import java.util.stream.Collectors;
1413

15-
public class OfflinePlayerProvider implements CommandProvider<OfflinePlayer> {
14+
public class OfflinePlayerCommandProvider implements CommandProvider<OfflinePlayer> {
1615

1716
private final JavaPlugin javaPlugin;
1817

19-
public OfflinePlayerProvider(JavaPlugin javaPlugin) {
18+
public OfflinePlayerCommandProvider(JavaPlugin javaPlugin) {
2019
this.javaPlugin = javaPlugin;
2120
}
2221

src/main/java/xyz/damt/command/provider/impl/bukkit/PlayerProvider.java renamed to src/main/java/xyz/damt/command/provider/impl/bukkit/PlayerCommandProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
import java.util.List;
1212
import java.util.stream.Collectors;
1313

14-
public class PlayerProvider implements CommandProvider<Player> {
14+
public class PlayerCommandProvider implements CommandProvider<Player> {
1515

1616
private final JavaPlugin javaPlugin;
1717

18-
public PlayerProvider(JavaPlugin javaPlugin) {
18+
public PlayerCommandProvider(JavaPlugin javaPlugin) {
1919
this.javaPlugin = javaPlugin;
2020
}
2121

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package xyz.damt.command.provider.impl.normal;
2+
3+
import org.bukkit.ChatColor;
4+
import xyz.damt.command.exception.CommandProviderNullException;
5+
import xyz.damt.command.provider.CommandProvider;
6+
7+
public class BooleanCommandProvider implements CommandProvider<Boolean> {
8+
9+
@Override
10+
public Boolean provide(String s) throws CommandProviderNullException {
11+
if (s.equalsIgnoreCase("true"))
12+
return true;
13+
14+
if (s.equalsIgnoreCase("false"))
15+
return false;
16+
17+
throw new CommandProviderNullException(ChatColor.RED + "Please input a valid boolean!");
18+
}
19+
20+
21+
}

0 commit comments

Comments
 (0)