분야 | 플러그인 |
---|---|
게임버전 | 모든버전 |
안녕하세요! 오늘 할 강좌는 명령어를 사용하면 플레이어의 발 밑에 블럭을 소환하도록 만들어 보겠습니다.
0.프로젝트 생성하기
먼저 새 프로젝트를 만들어 주도록 합니다.
File -> New -> JavaProject -> 프로젝트 이름 설정 뒤 Finish -> 스피곳 Build Path하기(모르시는 분은 2강 참조) -> 패키지, 클래스 생성
Project Name --------> LongCommand
package name ------->command
class name -------------> 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | package command;
import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player;
public class Main extends JavaPlugin{
@Override public void onEnable() { System.out.println("========================" + "\r\n" + " 플러그인이 활성화되었습니다" + "\r\n" + " Version1.0" + "\r\n" + " ========================"); }
@Override public void onDisable() { System.out.println("[플러그인이 비활성화되었습니다]."); }
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if(cmd.getName().equalsIgnoreCase("p")) {
if(args.length == 0) {
sender.sendMessage("커맨드를 길게 쳐주세요"); } else if(args[0].equalsIgnoreCase("w")) {
Player p =(Player) sender; p.getLocation().getBlock().setType(Material.WATER); }
else if(args[0].equalsIgnoreCase("l")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.LAVA); } else if(args[0].equalsIgnoreCase("cs")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.COBBLESTONE); } else if(args[0].equalsIgnoreCase("db")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.DIAMOND_BLOCK); } else if(args[0].equalsIgnoreCase("ib")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.IRON_BLOCK);
} else if(args[0].equalsIgnoreCase("eb")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.EMERALD_BLOCK);
} else if(args[0].equalsIgnoreCase("g")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.GRASS);
} else if(args[0].equalsIgnoreCase("i")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.ICE);
} else if(args[0].equalsIgnoreCase("s")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.STONE);
} else if(args[0].equalsIgnoreCase("gb")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.GOLD_BLOCK);
} else if(args[0].equalsIgnoreCase("gl")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.GLASS);
} else if(args[0].equalsIgnoreCase("wl")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.WOOL);
} else if(args[0].equalsIgnoreCase("lb")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.LAPIS_BLOCK);
} else if(args[0].equalsIgnoreCase("b")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.BRICK);
} else if(args[0].equalsIgnoreCase("gs")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.GLOWSTONE);
} else if(args[0].equalsIgnoreCase("qb")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.QUARTZ_BLOCK);
} else if(args[0].equalsIgnoreCase("gp")) {
Player p = (Player) sender; p.getLocation().getBlock().setType(Material.GRASS_PATH);
} }
return true; }
} | cs |
이렇게 해서 코드를 완성하였습니다.
2.코드 해석
public boolean onCommand(Command Sender, Command cmd, String label, string[] args
이 코드는 전에도 말씀드렸지만 명령하는자, 커맨드 등을 정의 해주는 논리형 구문입니다.
논리형은 마지막에 꼭 true 아니면 false 값을 적어 주어야 합니다.
if(cmd.getName().equalsIgnoreCase("p"))
제가 위에서 Command를 cmd로 정의 했습니다.
그 말은 "명령어" = cmd 가 되는 거죠.
그래서 cmd.getName()은 플레이어가 입력한 명령을 받는 것입니다.
만야 그 명령이 "p"일 때 라고 해석 할 수 있겠죠.
저번 날씨 강좌에서도 말씀드렸지만
if(args.length == 0)
이라는 구문은 플레이어가 p만 입력하고 그 뒤의 명령어를 사용하지 않았을 때가 되겠습니다.
그 때는 명령어를 길게 쳐 달라고 메세지를 출력하게 만들었습니다.
그다음은 else if(args[0].equalsIgnoreCase("명령이름"))
명령 이름에 원하시는 이름을 쓰시고
어떤 블럭을 소환할지 고르시고
게임에서 /p 명령이름
이렇게 쓰시면 선택하신 블럭이 소환됩니다.
먼저 블럭을 소환하려면 블럭을 지정하고 소환할 장소를 골라야겠죠.
플레이어 먼저 정의해주도록 하겠습니다.
먼저 sender는 명령하는자 즉 플레이어가 되겠습니다.
Player은 org.bukkit.entity.Player로 import 할 수 있습니다.
그래서 Player을 정의 해 줄 때 이렇게 씁니다.
Player p = (Player) sender;
이제 p = Player이 되었습니다.
p.getLocation().getBlock().setType(Material.블럭 이름);
이제 이렇게 하면 플레이어의 위치를 가져 와서 거기에다가 우리가 정해주는 Material을 소환하게 되는 겁니다.
예를 들어서
else if(args[0].equalsIgnoreCase("db")) {
Player p = (Player) sender;
p.getLocation().getBlock().setType(Material.DIAMOND_BLOCK); }
이런 구문이 있다면 플레이어가 /p db 라고 쳤을 때 플레이어 위치에 다이아몬드 블럭을 소환합니다.
3.plugin.yml 작성하기
프로젝트 우클릭 -> New -> File-> plugin.yml입력하고 엔터
name: longCommand version: 1.0 main: command.main commands: p:
main에는 패키지 이름.클래스 이름을 쓰셔야 합니다.
이번 강좌에는 커맨드가 들어가기 때문에 commands를 추가해줍니다.
4.Jar Export
이제 마지막 단계인 프로젝트를 내보내도록 하겠습니다.
프로젝트 우클릭 -> Export -> Java 폴더에서 JAR file 선택 후 Next -> 자신의 프로잭트 선택, Jar 파일을 어느 폴더에다가 둘지 설정하기 -> Finish 누르면 끝.
그리고 자신이 만든 프로젝트를 버킷 서버의 plugins 폴더에 넣고 버킷을 실행시켜 줍니다.
플러그인 작동 영상<-----이거 누르시면 이 플러그인의 작동 영상을 보실 수 있습니다(유튜브와 연결되어있습니다)
이것으로 오늘 강좌를 마치도록 하겠습니다!
오늘도 제 강좌를 보러와 주신 분들 감사합니다!:D
DDang_
2020.01.23좋은 글 감사합니다
겸손한젤리봇
2020.01.23DRDTF
2020.02.27좋은강좌감사합니다 이해가 잘 됩니다
킬육
2022.02.10명령어를 실행한 좌표에 소환하는게 아니고 실행한 좌표에서 y좌표를 바꿔서 소환하는건 안되나요?