Skip to content
This repository was archived by the owner on Nov 9, 2021. It is now read-only.

Commit 183b1b8

Browse files
committed
Update javadoc & example
1 parent fa89eb4 commit 183b1b8

File tree

5 files changed

+83
-4
lines changed

5 files changed

+83
-4
lines changed

example/team/unstudio/udpl/example/ExampleCommand.java

+41-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
package team.unstudio.udpl.example;
2+
import java.util.Arrays;
3+
import java.util.Collections;
4+
import java.util.List;
5+
import java.util.stream.Collectors;
6+
7+
import org.bukkit.Material;
28
import org.bukkit.entity.Player;
9+
import org.bukkit.inventory.ItemStack;
310

11+
import team.unstudio.udpl.command.anno.Alias;
412
import team.unstudio.udpl.command.anno.Command;
513
import team.unstudio.udpl.command.anno.Optional;
614
import team.unstudio.udpl.command.anno.Required;
15+
import team.unstudio.udpl.command.anno.TabComplete;
716

817
public class ExampleCommand {
918

1019
@Command(value = {}, // 指令名
11-
senders = Player.class, // 接收的指令发送者类型
12-
permission = "example.sendmessage")// 执行指令必须的权限
20+
senders = Player.class) // 接收的指令发送者类型
21+
@Alias("help") // 指令别名
22+
@Alias("info") // 指令别名
1323
public void example(Player player) { // 可选参数,value是默认值,usage是参数的用法
1424
player.sendMessage(ExamplePlugin.I18N.format(player, "example.i18n"));
1525
}
@@ -22,4 +32,33 @@ public void sendMessage(Player player,
2232
@Optional(value = "false", name = "前缀") boolean prefix) { // 可选参数,value是默认值,usage是参数的用法
2333
player.sendMessage(prefix?player.getDisplayName()+":"+message:message);
2434
}
35+
36+
@Command(value = "give",
37+
senders = Player.class,
38+
permission = "example.give")
39+
public void give(Player player,
40+
@Required(name = "物品") Material material,
41+
@Optional(value = "1", name = "数量") int amount,
42+
@Optional(value = "0", name = "损害值") short damage) {
43+
player.getInventory().addItem(new ItemStack(material, amount, damage));
44+
}
45+
46+
private static final String[] COMMON_WORDS = new String[] { "233", "666", "大吉大利,晚上吃鸡" };
47+
private static final String[] BOOLEANS = new String[] { "true", "false" };
48+
49+
@TabComplete("sendmessage") // 需要处理自动补全的指令
50+
public List<String> sendMessageTabComplete(String[] args) {
51+
switch (args.length) {
52+
case 1: {
53+
String prefix = args[args.length - 1];
54+
return Arrays.stream(COMMON_WORDS).filter(value -> value.startsWith(prefix)).collect(Collectors.toList());
55+
}
56+
case 2: {
57+
String prefix = args[args.length - 1];
58+
return Arrays.stream(BOOLEANS).filter(value -> value.startsWith(prefix)).collect(Collectors.toList());
59+
}
60+
default:
61+
return Collections.emptyList();
62+
}
63+
}
2564
}

example/team/unstudio/udpl/example/ExamplePlugin.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package team.unstudio.udpl.example;
22
import java.io.File;
33

4+
import org.bukkit.Material;
45
import org.bukkit.entity.Player;
56
import org.bukkit.plugin.java.JavaPlugin;
67

@@ -18,6 +19,7 @@ public void onEnable() {
1819
I18N = new SimpleI18n(new File(getDataFolder(), "lang"));
1920
Player player = null;
2021
player.sendMessage(ExamplePlugin.I18N.localize(player, "example.i18n"));
21-
AnnoCommandManager.builder().name("example").plugin(this).build().addHandler(new ExampleCommand()).registerCommand();
22+
AnnoCommandManager.builder().name("example").plugin(this).parameterHandler(Material.class, new MaterialParameterHandler()).build()
23+
.addHandler(new ExampleCommand()).registerCommand();
2224
}
2325
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package team.unstudio.udpl.example;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import java.util.stream.Collectors;
6+
7+
import org.bukkit.Material;
8+
9+
import team.unstudio.udpl.command.anno.CommandParameterHandler;
10+
11+
public class MaterialParameterHandler implements CommandParameterHandler{
12+
13+
@Override
14+
public Object transform(String value) {
15+
return Material.valueOf(value);
16+
}
17+
18+
@Override
19+
public List<String> tabComplete(String value) {
20+
return Arrays.stream(Material.values())
21+
.map(material->material.name())
22+
.filter(material->material.startsWith(value))
23+
.collect(Collectors.toList());
24+
}
25+
26+
}

src/main/java/team/unstudio/udpl/command/anno/CommandParameterHandler.java

+10
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,18 @@
1212

1313
public interface CommandParameterHandler {
1414

15+
/**
16+
* 参数转换
17+
* @param value
18+
* @return
19+
*/
1520
Object transform(String value);
1621

22+
/**
23+
* 参数自动补全
24+
* @param value
25+
* @return
26+
*/
1727
default List<String> tabComplete(String value){
1828
return Collections.emptyList();
1929
}

src/main/java/team/unstudio/udpl/command/anno/CommandWrapper.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,9 @@ public List<String> onTabComplete(String[] args){
227227

228228
if(!hasTabComplete()){
229229
try {
230-
tabComplete.addAll((List<String>) tabCompleter.invoke(tabCompleterObject, new Object[]{args}));
230+
List<String> completed = (List<String>) tabCompleter.invoke(tabCompleterObject, new Object[]{args});
231+
if(completed != null)
232+
tabComplete.addAll(completed);
231233
} catch (Exception e) {
232234
e.printStackTrace();
233235
}

0 commit comments

Comments
 (0)