개인 자료란 (JE)

  서버 커뮤니티

Profile JSD-ITHAN 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 개발

[8강] 마인크래프트 플러그인 개발하기 - 칼 우클릭 시 화염구 발사하기

2020.01.25 조회 수 3547 추천 수 3
분야 플러그인 
게임버전 모든버전 

6c2dd886b9898d6f8b3e2fb48540a45f.png

여러분 안녕하세요! 새해 복 많이 받으세요! m(_ _)m !오늘 할 강좌는 칼 우클릭 시 화염구를 발사하도록 만들어 보겠습니다.

0.새 프로젝트 생성

먼저 새 프로젝트를 만들어 주도록 합니다. 

File -> New -> JavaProject ->  프로젝트 이름 설정 뒤 Finish -> 스피곳 Build Path하기(모르시는 분은 2강 참조) -> 패키지, 클래스 생성 

저는 패키지 이름을 test이라고 하고 클래스 이름을 Main이라고 하겠습니다.


1.코드 적기

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

package test;

 

import org.bukkit.plugin.java.JavaPlugin;

import org.bukkit.Bukkit;

import org.bukkit.Material;

import org.bukkit.entity.Fireball;

import org.bukkit.entity.Player;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.block.Action;

import org.bukkit.event.player.PlayerInteractEvent;

 

public class Main extends JavaPlugin implements Listener{

    

    @Override

    public void onEnable() {

        System.out.println("TEST PLUGIN");

        System.out.println("PLUGIN IS ACTIVATED");

        Bukkit.getPluginManager().registerEvents(this, this);

    }

    @Override

    public void onDisable() {

        System.out.println("PLUGIN DISACTIVATED");

    }

    

    @EventHandler

    public void rightClick1(PlayerInteractEvent e)

    {

        Player p = e.getPlayer();

        Action a = e.getAction();

        

        if(a == Action.RIGHT_CLICK_AIR)

        {

            if(p.getItemInHand().getType() == Material.IRON_SWORD)

            {

                Fireball fb = p.launchProjectile(Fireball.class);

                fb.setVelocity(p.getLocation().getDirection().multiply(5));

            }

        }

    }

}

cs

2.코드 해석

이번 코드에는 별로 어려운 것이 없습니다.

일단 onEnable과 onDisable은 넘어가겠습니다.

이번 이벤트는 플레이어가 동작 할 때 생기는 이벤트입니다.

Player p = e.getPlayer();

 Action a = e.getAction();

위의 두개는 플레이어와 액션을 각각 지정해 준 것입니다.

if(a == Action.RIGHT_CLICK_AIR)

요것은 만약에 플레이어가 지정해준 아이템을 우클릭을 하였을 때를 말합니다.

 if(p.getItemInHand().getType() == Material.IRON_SWORD)

아까 플레이어를 p로 정의 하였습니다.

그러면 Player = p 가 되겠습니다.

그래서 플레이어가 들고 있는 아이템의 값을 받아서 그것이 만약 철 칼이라면 이라는 뜻이 되겠습니다.

Fireball fb = p.launchProjectile(Fireball.class);

fb.setVelocity(p.getLocation().getDirection().multiply(5));

요 구문은 쉽게 설명하자면 화염구를 fb라 정의 하였고 버킷에 Fireball.class 파일이 있습니다.

그 파일을 사용하겠다고 정의 한 후 그 화염구를 어디로 쏠지 정의 해주는 구문이라고 생각하시면 될 것 같습니다.


3. plugin.yml 작성하기

자, 이제 마지막 단계입니다.

프로젝트 우클릭 -> New -> File-> plugin.yml입력하고 엔터

 


name: test
version: 1.0
main: test.Main

저는 플러그인에 설명을 쓰지 않도록 하겠습니다.

다른것은 몰라도 main은 패키지 이름.클래스 이름이라고 써주셔야 하고 commands에는 꼭 커맨드 이름에 맞춰서 써주셔야 합니다.


4.Jar Export

이제 마지막 단계인 프로젝트를 내보내도록 하겠습니다.

프로젝트 우클릭 -> Export -> Java 폴더에서 JAR file 선택 후 Next -> 자신의 프로잭트 선택, Jar 파일을 어느 폴더에다가 둘지 설정하기 -> Finish 누르면 끝.

그리고 자신이 만든 프로젝트를 버킷 서버의 plugins 폴더에 넣고 버킷을 실행시켜 줍니다.


콘솔에서 pl이라고 적어서 플러그인이 정상적으로 실행 되는 지 확인하고 게임에서 

철 칼이나 여러분이 선택하신 아이템을 들고 하늘이나 땅에 우클릭이나 좌클릭(선택하신 대로) 하셔서 잘 실행 되는지 확인해봅니다.

만약 결과를 보고 싶으시다면 이 링크를 누르시면 됩니다 --------------------------->플러그인 작동 영상

궁금하시거나 안 되는 것들은 댓글에다가 적어주시면 감사하겠습니다:D

오늘도 부족한 제 강좌를 봐주셔서 감사합니다!









18개의 댓글

새해복 많이 받으셔요

JSD-ITHAN
2020.01.25
@틈틈서버부활중

트틈 서버부활중님도 새해 복 많이 받으세요!

JSWH77
2020.11.21
@JSD-ITHAN

......틈틈 아닌가요?

윈초
2020.01.25

해석을 안해도 이해가 된다아

 

저도 이렇게 강좌 써보고 싶은데에

DDang_
2020.01.26

님아 사랑합니다

윈초
2020.01.26

글쓰는 실력이 ㄷㄷ

+ 플러그인 만드는 실력도 ㄷㄷ

+ 해석하는 실력도 ㄷㄷ

-한마디로 능력자

+ 엄청난 사람!!!

JSD-ITHAN
2020.01.26
@윈초

그정도는 아닌데..하핫..감사합니다!

윈초
2020.01.26
@JSD-ITHAN

(아,,아닌가?ㅋㅋ)

JSD-ITHAN
2020.01.26
@윈초

ㅋㅋㅋㅋㅋㅋㅋ

엠군
2020.01.27

코드랑 코드 설명을 색이나 폰트 크기로 구분해서 보다 더 잘 구분이 되었음 좋겠습니다!

* projectile 은 모드에서 밖에 안써봤는데 플긴으로 보니까 신기하네용

JSD-ITHAN
2020.01.27
@엠군

피드백 감사합니다!

DRDTF
2020.02.27

부족한 강좌라뇨 너무 좋은강좌에요

아글
2020.06.17

PlayerInteractEvent는 무슨 이벤트인가요?

Machinegun
2020.10.06

혹시 multiply(5)가 뭘 뜻하는건지 알수 있나요?

네이첼0821
2020.10.09

와 정말 좋은 강의에요

 

호유
2020.10.19

특정이름을 가진 아이템만 가능하게 할수있나요?

Cubicic
2021.06.04

이거 if(p.getItemInHand().getType() == Material.IRON_SWORD) 에서 getItemInHand()에 줄이 쳐지는데 왜이런가요?

뉴스 및 창작물
/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 4

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

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3

/files/thumbnails/839/895/003/262x150.crop.jpg?20241006021227

SRV레코드는 보안도메인이 아닙니다. [서버오픈시 필독]

물귀신

2024-10-05

4

/files/thumbnails/648/892/003/262x150.crop.jpg?20241002184058

아티클

마인크래프트 라이브 2024 후기: 무성의가 느껴졌던 '절망편' 라이브

라비

2024-10-02

4