개인 자료란 (JE)

  서버 커뮤니티

Profile 난아무것도몰라요 대표칭호 없음
Profile

플러그인 제작

마인크래프트 플러그인 만들기 3강 - 커맨드 심화(ev와 fly)

2020.10.05 조회 수 761 추천 수 1

안녕하세요 난아몰입니다.

그럼 바로 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블럭을 넣어 줍시다. 그 뒤 senderPlayer이고, 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에 등록하는 코드)

테스트를 해봅시다.

30ba48460b32d6e9412f2d87420c9a56.png

메시지도 잘 뜨고

f9f9fe127d814fbe3af8ab5776eb164a.png

투명화도 적용 잘 됩니다.

그럼 fly도 테스트 해볼까요?

50443448b57e8dbd42631389991c662c.png

플라이도 잘 적용됩니다.


후..... 이번강좌는 좀 짧네요.

다음강좌는 이벤트 입니다.

혹시 원하시는 강좌가 있으면 댓글로 남겨주세요.

그럼 안녕히....

Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!

뉴스 및 창작물
/files/thumbnails/483/916/003/262x150.crop.jpg?20241127115329

레드스톤

[노트블럭 커버] 뉴진스 - ETA 2

노트블럭전문가

2024-11-27

0

/files/thumbnails/150/925/003/262x150.crop.jpg?20241123005717

건축

응답하라 1988 ?

팀뉴일리시

2024-11-23

4

/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 6

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2