수색…


통사론

  • @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)

명령 처리

명령을 처리하려면 CommandExecutor 인터페이스를 구현하는 클래스가 있어야합니다. JavaPlugin 클래스 (플러그인의 메인 클래스)는 이미 이것을 구현합니다.

CommandExecutor 인터페이스를 구현할 때 다음 메소드를 구현해야합니다.

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Handle your command in here
return true;      ///Should return false if you want to show the usage

}

보낸 사람이 명령을 보낸 사람입니다. 플레이어 또는 콘솔이 될 수 있습니다.

CMD는 plugin.yml에 선언 된대로 듣고있는 명령입니다. 라벨과 혼동하지 마십시오.

label은이 명령을 실행하는 데 사용되는 별칭이며, 보낸 사람이 슬래시 뒤에 입력하는 내용입니다.

마지막으로 args는 보낸 사람이 명령을 보내는 데 사용한 인수입니다.

가능한 명령은 다음과 같이 될 수 있습니다.

/ Tell Kerooker 안녕하세요, Kerooker!

Tell은 레이블이 될 것이며 plugin.yml에서 그렇게 말하면 명령으로 정의 될 수도 있습니다.

'Kerooker', 'Hi,', 'Kerooker!' 귀하의 args 0, 1 및 2 각각 있습니다

수익으로 모든 일이 그런 식으로 진행될 것으로 예상 할 때 항상 사실을 반환하기를 원할 것입니다. 보낸 사람에게 plugin.yml에 정의 된 명령 사용법을 표시하려면 false를 반환해야합니다.

간단한 GameMode 명령 설정 (/ gm) )

이 예제는 onCommand를 사용하는 방법에 대한 아주 기본적인 예제를 보여줍니다. onCommand에서 직접 명령을 처리 할 것을 제안하지는 않지만이 간단한 경우의 트릭입니다.

이 예에서는 플레이어의 게임 모드를 설정하려고 시도합니다.

우리가해야 할 첫 번째 일은 콘솔의 게임 모드를 설정할 수 없기 때문에 발신자가 ConsoleCommandSender가 아닌지 확인하는 것입니다. 이것은 (발신자 instanceof Player)로 수행됩니다.

다음으로 플레이어가 / gm CREATIVE (또는 다른 게임 모드)를 입력하면 2 가지를 확인해야합니다.

  1. 1 개의 인수 (CREATIVE)를 전달하는지 확인하십시오.
  2. 그들의 명령이 "gm"인지 확인하십시오.

args.length == 1 && label.equalsIgnoreCase ( "gm") 이러한 검사는 다음과 같이 수행했습니다.

이제 플레이어가 "/ gm x"를 입력했는지 알 수 있습니다.

다음으로해야 할 일은 args [0]를 GameMode 객체로 변환하여 플레이어에게 적용 할 수 있도록하는 것입니다. GameMode.valueOf (String)를 사용하여 수행 할 수 있습니다. 그러나 Java 열거 형 설명서에 따르면 열거 형이 valueOf ()로 전달되면 열거 형과 일치하지 않으면 IllegalArgumentException이 발생하므로 반드시 확인해야합니다. 그걸 잡아라.

게임 모드가되면 p.setGameMode (gm)를 사용하면 플레이어의 게임 모드가 변경됩니다. 우리가 예외를 잡은 경우 - 단순히 문장을 출력하고 false를 반환합니다.

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (sender instanceof Player) { 
        final Player p = (Player) sender;

        if (args.length == 1 && label.equalsIgnoreCase("gm")) {
            try {
                GameMode gm = GameMode.valueOf(args[0]);
                p.setGameMode(gm);
                p.sendMessage(ChatColor.GREEN + "Your gamemode has been set to: " + gm.toString());
                return true;
            } catch (IllegalArgumentException e) {
                p.sendMessage(ChatColor.RED + "Invalid gamemode option!");
                return false;
            }

        }
    }
    return false;
}

명령이 메인 클래스에 없습니다.

명령이 많으면 주 수업에 모두 넣지 말아야합니다.

  1. 새 클래스를 만들고 CommandExecutor 구현하도록합니다.

  2. 클래스에 다음을 추가하십시오.

     @Override 
     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    
     }
    
  3. 기본 클래스에서 onEnable을 추가합니다 (commandName을 명령 이름으로 바꾸고 CommandExecutor를 클래스 이름으로 바꿉니다).

     getCommand("commandName").setExecutor(new CommandExecutor());
    


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow