안녕하세요 난아몰입니다.
그럼 바로 3강 커맨드 심화 강좌에 들어가겠습니다.
이번에 만들어 볼 명령어는 ev,fly인데요. 일단 ev먼저 만들어 보죠.
오늘도 패키지 우클릭 > New > Java Class를 눌러 새로운 클래스를 만들고 클래스 이름 옆에 implements TabExecutor을 적으신 다음에 TabExecutor의 매소드를 구현 해 봅시다.
public class Commands implements TabExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { return false; } @Override public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { return null; } }
이렇게요
자, 일단 onCommand()안에커맨드가 ev인지 확인하는 if블럭을 넣어 줍시다. 그 뒤 sender가 Player이고, op인지 확인하는 코드를 넣어 줍시다.또한 이 조건이 만족하지 않을 때 메시지를 출력하는 else블럭도 넣어줍시다.
if(command.getName().equals("ev")) { if(sender instanceof Player) { Player p = (Player/*형변환*/) sender; //Player선언 if(p.isOp()) { }else { p.sendMessage("§c당신은 op가 아니기에 이 명령어를 사용할 수 없습니다"); } }else { sender.sendMessage("이 명령어는 플레이어만 사용가능 합니다"); } }
이렇게요.
그 뒤 아래의 코드를 사용하여 플레이어에게 이펙트를 추가해 줍시다.
p.sendMessage("§6투명화가 적용되었습니다"); p.addPotionEffect(/*포션 이펙트 : */new PotionEffect(PotionEffectType.INVISIBILITY /*포션 이펙트 타입*/, 999999999/*지속시간*/, 255 /*레벨*/, true /*증푝*/, false /*파티클 보일것인가*/, false /*아이콘을 보일것인가*/)); //이펙트를 추가하는 코드
다음으로 fly 커멘드를 만들어 봅시다.
else if(command.getName().equals("fly")) { if(sender instanceof Player) { Player p = (Player/*형변환*/) sender; //Player선언 if(p.isOp()) { }else { p.sendMessage("§c당신은 op가 아니기에 이 명령어를 사용할 수 없습니다"); } }else { sender.sendMessage("이 명령어는 플레이어만 사용가능 합니다"); } }
ev와 비슷하게 짜주고
필드에 private List<UUID> 를 선언해 줍시다.
private List<UUID> fly = new ArrayList<>();
그리고 p가 오피인지 확인하는 if블럭 안에 아래의 코드를 넣어줍시다
if(fly.contains(p.getUniqueId())) { //fly에 플레이어의 uuid가 존재할 때 p.setAllowFlight(false); //플레이어의 플라이를 뺀다 p.sendMessage("§c플라이가 헤제되었습니다"); fly.remove(p.getUniqueId()); }else { //fly에 플레이어의 uuid가 존재 해지 않을 때 p.setAllowFlight(true); //플레이어에게 플라이를 추가한다 p.sendMessage("§a플라이가 적용되었습니다"); fly.add(p.getUniqueId()); }
자 그럼 마지막으로 TabCompleter을 만들려고 했는데...... 만들필요가 없네요?
ev: description: invisible fly: description: fly
이렇게 plugin.yml에 커맨드 등록 해주고
pdf.getCommands().keySet().forEach(cmd -> getCommand(cmd).setExecutor(new Commands()));
메인클래스에도 등록해주고(plugin.yml의 모든 커맨드를 하나의 Excutor에 등록하는 코드)
테스트를 해봅시다.
메시지도 잘 뜨고
투명화도 적용 잘 됩니다.
그럼 fly도 테스트 해볼까요?
플라이도 잘 적용됩니다.
후..... 이번강좌는 좀 짧네요.
다음강좌는 이벤트 입니다.
혹시 원하시는 강좌가 있으면 댓글로 남겨주세요.
그럼 안녕히....
댓글이 없습니다.
새로운 댓글을 등록해 주세요!