Skip to content

Commit 809902a

Browse files
committed
Add command sender as param to arg processors
1 parent 1162e80 commit 809902a

File tree

13 files changed

+77
-90
lines changed

13 files changed

+77
-90
lines changed

paper/src/main/java/cz/foresttech/commandapi/paper/argument/OfflinePlayerArgumentProcessor.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cz.foresttech.commandapi.paper.argument;
22

3-
import cz.foresttech.commandapi.shared.ArgumentTypeProcessor;
3+
import cz.foresttech.commandapi.shared.AbstractCommandSenderWrapper;
4+
import cz.foresttech.commandapi.shared.processor.ArgumentTypeProcessor;
45
import org.bukkit.Bukkit;
56
import org.bukkit.OfflinePlayer;
67
import org.bukkit.entity.Player;
@@ -11,7 +12,7 @@
1112
public class OfflinePlayerArgumentProcessor implements ArgumentTypeProcessor<OfflinePlayer> {
1213

1314
@Override
14-
public OfflinePlayer get(String argument) {
15+
public <S extends AbstractCommandSenderWrapper<?>> OfflinePlayer get(S commandSender, String argument) {
1516
Player player = Bukkit.getPlayer(argument);
1617
if (player == null) {
1718
try {
@@ -35,8 +36,12 @@ public OfflinePlayer get(String argument) {
3536
}
3637

3738
@Override
38-
public List<String> tabComplete(String argument) {
39-
return null;
39+
public <S extends AbstractCommandSenderWrapper<?>> List<String> tabComplete(S commandSender, String argument) {
40+
String inLowerCase = argument.toLowerCase();
41+
return Bukkit.getOnlinePlayers().stream()
42+
.map(Player::getName)
43+
.filter(name -> name.toLowerCase().startsWith(inLowerCase))
44+
.toList();
4045
}
4146

4247
}

paper/src/main/java/cz/foresttech/commandapi/paper/argument/PlayerArgumentProcessor.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cz.foresttech.commandapi.paper.argument;
22

3-
import cz.foresttech.commandapi.shared.ArgumentTypeProcessor;
3+
import cz.foresttech.commandapi.shared.AbstractCommandSenderWrapper;
4+
import cz.foresttech.commandapi.shared.processor.ArgumentTypeProcessor;
45
import org.bukkit.Bukkit;
56
import org.bukkit.entity.Player;
67

@@ -10,7 +11,7 @@
1011
public class PlayerArgumentProcessor implements ArgumentTypeProcessor<Player> {
1112

1213
@Override
13-
public Player get(String argument) {
14+
public <S extends AbstractCommandSenderWrapper<?>> Player get(S commandSender, String argument) {
1415
Player player = Bukkit.getPlayer(argument);
1516
if (player == null) {
1617
try {
@@ -23,8 +24,12 @@ public Player get(String argument) {
2324
}
2425

2526
@Override
26-
public List<String> tabComplete(String argument) {
27-
return null;
27+
public <S extends AbstractCommandSenderWrapper<?>> List<String> tabComplete(S commandSender, String argument) {
28+
String inLowerCase = argument.toLowerCase();
29+
return Bukkit.getOnlinePlayers().stream()
30+
.map(Player::getName)
31+
.filter(name -> name.toLowerCase().startsWith(inLowerCase))
32+
.toList();
2833
}
2934

3035
}

shared/src/main/java/cz/foresttech/commandapi/shared/AbstractCommandAPI.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package cz.foresttech.commandapi.shared;
22

3+
import cz.foresttech.commandapi.shared.annotation.Arg;
4+
import cz.foresttech.commandapi.shared.annotation.Command;
5+
import cz.foresttech.commandapi.shared.annotation.SubCommand;
6+
import cz.foresttech.commandapi.shared.processor.ArgumentTypeProcessor;
7+
import cz.foresttech.commandapi.shared.processor.CommandProcessor;
8+
39
import java.lang.reflect.InvocationTargetException;
410
import java.lang.reflect.Method;
511
import java.lang.reflect.Parameter;
@@ -104,7 +110,7 @@ public List<String> tabComplete(T commandSender, String cmd, String[] args) {
104110
if (parameter.isAnnotationPresent(Arg.class)) {
105111
ArgumentTypeProcessor<?> processor = argumentTypeProcessorMap.get(parameter.getType());
106112
if (processor != null) {
107-
List<String> result = processor.tabComplete(argsToCheck[argsToCheck.length - 1]);
113+
List<String> result = processor.tabComplete(commandSender, argsToCheck[argsToCheck.length - 1]);
108114
if (result != null) {
109115
list.addAll(result);
110116
} else {
@@ -330,7 +336,7 @@ private Object[] prepareParameters(Method method, T commandSender, String[] args
330336
}
331337
}
332338

333-
Object value = parseArgument(parameter.getType(), arg);
339+
Object value = parseArgument(commandSender, parameter.getType(), arg);
334340
if (value == null) {
335341
return null;
336342
}
@@ -377,12 +383,12 @@ private void invokeMethod(Method method, CommandProcessor instance, T commandSen
377383
}
378384
}
379385

380-
private Object parseArgument(Class<?> clazz, String argument) {
386+
private Object parseArgument(T commandSender, Class<?> clazz, String argument) {
381387
ArgumentTypeProcessor<?> argumentTypeProcessor = argumentTypeProcessorMap.get(clazz);
382388
if (argumentTypeProcessor == null) {
383389
return null;
384390
}
385-
return argumentTypeProcessor.get(argument);
391+
return argumentTypeProcessor.get(commandSender, argument);
386392
}
387393

388394
}

shared/src/main/java/cz/foresttech/commandapi/shared/CommandProcessor.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

shared/src/main/java/cz/foresttech/commandapi/shared/Arg.java renamed to shared/src/main/java/cz/foresttech/commandapi/shared/annotation/Arg.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cz.foresttech.commandapi.shared;
1+
package cz.foresttech.commandapi.shared.annotation;
22

33
import java.lang.annotation.ElementType;
44
import java.lang.annotation.Retention;

shared/src/main/java/cz/foresttech/commandapi/shared/Command.java renamed to shared/src/main/java/cz/foresttech/commandapi/shared/annotation/Command.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cz.foresttech.commandapi.shared;
1+
package cz.foresttech.commandapi.shared.annotation;
22

33
import java.lang.annotation.ElementType;
44
import java.lang.annotation.Retention;

shared/src/main/java/cz/foresttech/commandapi/shared/CommandHelp.java renamed to shared/src/main/java/cz/foresttech/commandapi/shared/annotation/CommandHelp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cz.foresttech.commandapi.shared;
1+
package cz.foresttech.commandapi.shared.annotation;
22

33
import java.lang.annotation.ElementType;
44
import java.lang.annotation.Retention;

shared/src/main/java/cz/foresttech/commandapi/shared/SubCommand.java renamed to shared/src/main/java/cz/foresttech/commandapi/shared/annotation/SubCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cz.foresttech.commandapi.shared;
1+
package cz.foresttech.commandapi.shared.annotation;
22

33
import java.lang.annotation.ElementType;
44
import java.lang.annotation.Retention;

shared/src/main/java/cz/foresttech/commandapi/shared/ArgumentTypeProcessor.java renamed to shared/src/main/java/cz/foresttech/commandapi/shared/processor/ArgumentTypeProcessor.java

Lines changed: 25 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,102 @@
1-
package cz.foresttech.commandapi.shared;
1+
package cz.foresttech.commandapi.shared.processor;
2+
3+
import cz.foresttech.commandapi.shared.AbstractCommandSenderWrapper;
24

35
import java.util.List;
46

57
public interface ArgumentTypeProcessor<T> {
68

7-
T get(String argument);
9+
<S extends AbstractCommandSenderWrapper<?>> T get(S commandSender, String argument);
810

9-
List<String> tabComplete(String argument);
11+
default <S extends AbstractCommandSenderWrapper<?>> List<String> tabComplete(S commandSender, String argument) {
12+
return null;
13+
}
1014

11-
ArgumentTypeProcessor<String> STRING = new ArgumentTypeProcessor<String>() {
15+
ArgumentTypeProcessor<String> STRING = new ArgumentTypeProcessor<>() {
1216
@Override
13-
public String get(String argument) {
17+
public <S extends AbstractCommandSenderWrapper<?>> String get(S commandSender, String argument) {
1418
return argument;
1519
}
16-
17-
@Override
18-
public List<String> tabComplete(String argument) {
19-
return null;
20-
}
2120
};
2221

23-
ArgumentTypeProcessor<Integer> INTEGER = new ArgumentTypeProcessor<Integer>() {
22+
ArgumentTypeProcessor<Integer> INTEGER = new ArgumentTypeProcessor<>() {
2423
@Override
25-
public Integer get(String argument) {
24+
public <S extends AbstractCommandSenderWrapper<?>> Integer get(S commandSender, String argument) {
2625
try {
2726
return Integer.parseInt(argument);
2827
} catch (NumberFormatException e) {
2928
return null;
3029
}
3130
}
32-
33-
@Override
34-
public List<String> tabComplete(String argument) {
35-
return null;
36-
}
3731
};
3832

39-
ArgumentTypeProcessor<Double> DOUBLE = new ArgumentTypeProcessor<Double>() {
33+
ArgumentTypeProcessor<Double> DOUBLE = new ArgumentTypeProcessor<>() {
4034
@Override
41-
public Double get(String argument) {
35+
public <S extends AbstractCommandSenderWrapper<?>> Double get(S commandSender, String argument) {
4236
try {
4337
return Double.parseDouble(argument);
4438
} catch (NumberFormatException e) {
4539
return null;
4640
}
4741
}
48-
49-
@Override
50-
public List<String> tabComplete(String argument) {
51-
return null;
52-
}
5342
};
5443

55-
ArgumentTypeProcessor<Boolean> BOOLEAN = new ArgumentTypeProcessor<Boolean>() {
44+
ArgumentTypeProcessor<Boolean> BOOLEAN = new ArgumentTypeProcessor<>() {
5645
@Override
57-
public Boolean get(String argument) {
46+
public <S extends AbstractCommandSenderWrapper<?>> Boolean get(S commandSender, String argument) {
5847
return Boolean.parseBoolean(argument);
5948
}
60-
61-
@Override
62-
public List<String> tabComplete(String argument) {
63-
return null;
64-
}
6549
};
6650

67-
ArgumentTypeProcessor<Long> LONG = new ArgumentTypeProcessor<Long>() {
51+
ArgumentTypeProcessor<Long> LONG = new ArgumentTypeProcessor<>() {
6852
@Override
69-
public Long get(String argument) {
53+
public <S extends AbstractCommandSenderWrapper<?>> Long get(S commandSender, String argument) {
7054
try {
7155
return Long.parseLong(argument);
7256
} catch (NumberFormatException e) {
7357
return null;
7458
}
7559
}
76-
77-
@Override
78-
public List<String> tabComplete(String argument) {
79-
return null;
80-
}
8160
};
8261

83-
ArgumentTypeProcessor<Float> FLOAT = new ArgumentTypeProcessor<Float>() {
62+
ArgumentTypeProcessor<Float> FLOAT = new ArgumentTypeProcessor<>() {
8463
@Override
85-
public Float get(String argument) {
64+
public <S extends AbstractCommandSenderWrapper<?>> Float get(S commandSender, String argument) {
8665
try {
8766
return Float.parseFloat(argument);
8867
} catch (NumberFormatException e) {
8968
return null;
9069
}
9170
}
92-
93-
@Override
94-
public List<String> tabComplete(String argument) {
95-
return null;
96-
}
9771
};
9872

99-
ArgumentTypeProcessor<Short> SHORT = new ArgumentTypeProcessor<Short>() {
73+
ArgumentTypeProcessor<Short> SHORT = new ArgumentTypeProcessor<>() {
10074
@Override
101-
public Short get(String argument) {
75+
public <S extends AbstractCommandSenderWrapper<?>> Short get(S commandSender, String argument) {
10276
try {
10377
return Short.parseShort(argument);
10478
} catch (NumberFormatException e) {
10579
return null;
10680
}
10781
}
108-
109-
@Override
110-
public List<String> tabComplete(String argument) {
111-
return null;
112-
}
11382
};
11483

115-
ArgumentTypeProcessor<Byte> BYTE = new ArgumentTypeProcessor<Byte>() {
84+
ArgumentTypeProcessor<Byte> BYTE = new ArgumentTypeProcessor<>() {
11685
@Override
117-
public Byte get(String argument) {
86+
public <S extends AbstractCommandSenderWrapper<?>> Byte get(S commandSender, String argument) {
11887
try {
11988
return Byte.parseByte(argument);
12089
} catch (NumberFormatException e) {
12190
return null;
12291
}
12392
}
124-
125-
@Override
126-
public List<String> tabComplete(String argument) {
127-
return null;
128-
}
12993
};
13094

131-
ArgumentTypeProcessor<Character> CHARACTER = new ArgumentTypeProcessor<Character>() {
95+
ArgumentTypeProcessor<Character> CHARACTER = new ArgumentTypeProcessor<>() {
13296
@Override
133-
public Character get(String argument) {
97+
public <S extends AbstractCommandSenderWrapper<?>> Character get(S commandSender, String argument) {
13498
return argument.charAt(0);
13599
}
136-
137-
@Override
138-
public List<String> tabComplete(String argument) {
139-
return null;
140-
}
141100
};
142101

143102
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package cz.foresttech.commandapi.shared.processor;
2+
3+
public interface CommandProcessor {
4+
}

0 commit comments

Comments
 (0)