@Commander(
name = "test",
description = "test command",
alias = {"tes", "te"}
)
public class TestCommand implements CommandNode {
@Override
public void execute(CommandSender commandSender) {
}
}
@Commander(
name = "one",
description = "test one command"
)
public class TestOneCommand implements CommandNode {
//指令參數, 在指令幫助將顯示參數名稱為string
//order 則是 指令參數排序
@CommandArg(order = 0, labels = {"string"})
private String value;
@Override
public void execute(CommandSender commandSender) {
commandSender.sendMessage("this is one command with value "+value);
}
}
@Commander(
name = "two",
description = "two command"
)
public class TestTwoCommand implements CommandNode {
@CommandArg(order = 0)
private int number;
@Override
public void execute(CommandSender commandSender) {
commandSender.sendMessage("this is two command with number "+number);
}
}
TesterRegistry.java
public class TesterRegistry implements ComponentsRegistry {
@Override
public void registerCommand(CommandRegistry commandRegistry) {
commandRegistry.command(TestCommand.class, c -> {
c.command(TestOneCommand.class);
c.command(TestTwoCommand.class);
});
}
@Override
public void registerListeners(ListenerRegistry listenerRegistry) {
}
}
@Commander(
name = "config",
description = "config command"
)
public class TestConfigCommand implements CommandNode {
@Override
public void execute(CommandSender commandSender) {
}
}
@Commander(
name = "edit",
description = "config edit command"
)
public class TestConfigEditCommand implements CommandNode {
private final Random random = new Random();
@Inject //注入物件
private TestConfig config;
@Override
public void execute(CommandSender commandSender) {
config.bool = random.nextBoolean();
config.name = UUID.randomUUID().toString();
config.number = random.nextInt();
config.box = new TestConfig.Box();
config.box.color = ChatColor.values()[random.nextInt(ChatColor.values().length)];
config.box.name = UUID.randomUUID().toString()+" box";
config.box.size = random.nextInt();
try {
config.getController().save();
commandSender.sendMessage("save completed");
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Commander(
name = "reload",
description = "config reload command"
)
public class TestConfigReloadCommand implements CommandNode {
@Inject // 注入物件
private TestConfig config;
@Override
public void execute(CommandSender commandSender) {
config.getController().reload();
commandSender.sendMessage("reload completed");
}
}
public class TestListeners implements Listener {
@Inject // 注入物件
private TestConfig config;
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent e) {
if (e.getMessage().equals("config")) {
e.getPlayer().sendMessage(config.toString());
}
}
}
public class TesterSingleton {
private final Map<String, String> collection = new HashMap<>();
public void setKey(String key, String value){
this.collection.put(key, value);
}
public String getString(){
return this.collection.toString();
}
}
public class TesterLifeCycle implements ELDLifeCycle {
@Inject
private TesterSingleton singleton;
@Inject
private TestConfig config;
@Override
public void onEnable(JavaPlugin javaPlugin) {
singleton.setKey("abc", "fuck");
singleton.setKey("xyz", "diu");
javaPlugin.getLogger().info(singleton.getString());
javaPlugin.getLogger().info(config.toString());
}
@Override
public void onDisable(JavaPlugin javaPlugin) {
javaPlugin.getLogger().info(singleton.getString());
javaPlugin.getLogger().info(config.toString());
}
}
public class TestManager {
private final TesterSingleton singleton;
@Inject
public TestManager(TesterSingleton singleton){
this.singleton = singleton;
singleton.setKey("start", "started a insertion in constructor");
}
public void doSomething(){
System.out.println(singleton.getString())
}
}
@Commander(
name = "one",
description = "one scheduler"
)
public class TestSchedulerOneCommand implements CommandNode {
@Inject
private ScheduleService service; // 此為框架內部可使用服務
@Override
public void execute(CommandSender commandSender) {
commandSender.sendMessage("wait for 5 secs");
service.injectTask(new BukkitRunnable() {
@Inject
private ScheduleService service;
@Override
public void run() {
commandSender.sendMessage("scheduler service instance inside bukkit runnable is "+(service == null ? "null" : "not null !"));
}
}).asynchronous(false)
.timeout(100L)
.run(ELDTester.getProvidingPlugin(ELDTester.class));
}
}