2016-08-12 3 views
-1

내 서버용 플러그인을 개발하기 시작했습니다. 메인 클래스와 프롤 명령어를 만들었지 만, gamemode 명령어로 시작했을 때 모두 멈췄다. 오류없이 작동하지만 출력이 없음을 의미합니다. 그것은 단순한 실수 일 수 있지만 그것을 찾을 수 없습니다.BUKKIT - MINECRAFT 게임 모드 설정

import org.bukkit.Material; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandExecutor; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.inventory.InventoryClickEvent; 
import org.bukkit.inventory.Inventory; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.meta.ItemMeta; 
import org.bukkit.plugin.java.JavaPlugin; 

public class Gamemode implements CommandExecutor { 

    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { 

     if (!(sender instanceof Player)) { 
      sender.sendMessage(ChatColor.RED + "Haha nice try not happening today."); 
      return true; 
     } 
     Player p = (Player) sender; 
     if (cmd.getName().equalsIgnoreCase("gm")) { 
      if ((!p.hasPermission("sutils.*")) && 
        (!p.hasPermission("sutils.gamemode"))) { 
       p.sendMessage(ChatColor.RED + "Sorry no permission."); 
       return true; 
      } 
      if (args.equals("0")) { 
       p.setGameMode(GameMode.SURVIVAL); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Survival"); 
      } 

      if (args.equals("1")) { 
       p.setGameMode(GameMode.CREATIVE); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Creative"); 
      } 

      if (args.equals("2")) { 
       p.setGameMode(GameMode.ADVENTURE); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Adventure"); 
      } 

      if (args.equals("3")) { 
       p.setGameMode(GameMode.SPECTATOR); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Spectator"); 
      } 
      return true; 

     } 
     return true; 
    } 

} 

실제로 일어나는 유일한 것은 내가 콘솔에 명령을 입력 할 때 나에게 내 아닌 플레이어 MSG를 전송하지만, 선수로 아니가 작동하지 않는 것입니다 :

여기 내 코드입니다.

답변

0

여기에있는 상황은 다음과 같습니다. 'args'는 단일 문자열이 아니며 문자열 배열입니다. 문자열의 배열이 문자열과 같은지 확인할 수는 없습니다.

그래서 당신이해야 할 일이다 : 인수의 경우

  • 점검
  • 확인 null가 아닌 경우, 인수 [0] .equals ("0") 또는 경우 인수 [1] .equals (" 1 ") ...

args [0]을 사용하여 명령의 위치 0에서 인수에 액세스하려고합니다. 이런 식으로 뭔가 :

/1

  • GM GM이 명령의 commandlabel입니다

  • 1 명령이 들어

을의 인수 0, 우리는 할 수 있습니다 다음 :

if (args == null) { 
    p.sendMessage(ChatColor.RED + "You must use an arg!"); 
    return false; 
} 

if (args[0].equals("0") { 
    p.setGameMode(GameMode.SURVIVAL); 
    p.sendMessage(ChatColor.RED + "Gamemode set to survival"); 
    return true; 
} else if (args[0].equals("1") { 
    //Setgamemode to creative 
    //...... 
} 

그 트릭을해야합니다!

+1

당신은 거기에 오타가 있었는데, 그걸 고정 시켰습니다. 전 완전히 귀하의 게시물에 동의하지만, 나는이 경우에 대신 사용 스위치를 추가하고 싶습니다. 자바 버전에 따라 args [0]을 정수로 변환해야합니다. 그 이유는 단지 그것의 청소기 때문에 –