70 lines
2.0 KiB
Java
70 lines
2.0 KiB
Java
package ghast.command;
|
|
|
|
import lombok.AccessLevel;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.experimental.UtilityClass;
|
|
import org.bukkit.Bukkit;
|
|
|
|
import static org.joor.Reflect.on;
|
|
|
|
@UtilityClass
|
|
@SuppressWarnings("unused")
|
|
public class CommandManager {
|
|
|
|
public Builder create(String name) {
|
|
return new Builder(name);
|
|
}
|
|
|
|
public void register(String name, CommandExecuter executer) {
|
|
create(name).executer(executer).register();
|
|
}
|
|
|
|
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
|
public static class Builder {
|
|
|
|
private final String name;
|
|
private CommandExecuter executer;
|
|
private ErrorConsumer errorConsumer;
|
|
private Boolean onlyPlayer;
|
|
private String deniedMessage;
|
|
|
|
public Builder executer(CommandExecuter executer) {
|
|
this.executer = executer;
|
|
return this;
|
|
}
|
|
|
|
public Builder onError(ErrorConsumer errorConsumer) {
|
|
this.errorConsumer = errorConsumer;
|
|
return this;
|
|
}
|
|
|
|
public Builder useOnlyPlayer(String deniedMessage) {
|
|
this.onlyPlayer = true;
|
|
this.deniedMessage = deniedMessage;
|
|
return this;
|
|
}
|
|
|
|
public Builder useOnlyPlayer() {
|
|
return useOnlyPlayer(null);
|
|
}
|
|
|
|
public Builder useOnlyConsole(String deniedMessage) {
|
|
this.onlyPlayer = false;
|
|
this.deniedMessage = deniedMessage;
|
|
return this;
|
|
}
|
|
|
|
public Builder useOnlyConsole() {
|
|
return useOnlyConsole(null);
|
|
}
|
|
|
|
public void register() {
|
|
//TODO для Paper такие "извращения" не требуются. Нужно продумать.
|
|
on(Bukkit.getServer())
|
|
.call("getCommandMap")
|
|
.call("register", name, new CommandWrapper(name, this.onlyPlayer, this.deniedMessage,
|
|
this.executer, this.errorConsumer));
|
|
}
|
|
}
|
|
}
|