이전에 찾았던 플러그인은 아이템에 부여된 능력치가 복사되지 않고 순수 템만 지급되었었다. 지금 사용하는건 타 유저가 개발해둔 스크립트를 사용하고 있었지만 내 입맛에 맞게 플러그인으로 만들기로 했다.
내가 사용할 명령어를 등록해준다.
commands:
...
GiveAll:
description: 모든 유저에게 아이템을 지급합니다.
usage: /GiveAll 혹은 /GiveAll now
permission: hottimeevent.giveall
permission-message: You do not have permission to use this command.
permissions:
...
hottimeevent.giveall:
default: op
이걸 생성하는 이유는 브로드캐스트를 할 때 앞에 붙을 양식을 정하기 위해서다.
format: "[ §cHotTime Event§f ] "
해당 명령어를 입력하면 작동할 기능을 넣을 클래스를 생성한다.
GiveAll 로 이름을 정했다.
@Override
public void onEnable() {
//플러그인 활성화
getLogger().info("§cHotTime Event plugin on");
+ this.saveDefaultConfig();
//플러그인 활성화
getCommand("hottimeeventtest").setExecutor(new TestCommand());
+ getCommand("giveall").setExecutor(new GiveAll());
}
public class GiveAll implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) {
String format = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getConfig().getString("format");
if (sender instanceof Player) { //플레이어야 명령어 실행 가능
Bukkit.broadcastMessage(format + "곧 아이템이 지급됩니다! 인벤토리를 비워주세요!");
ItemStack tempItem = ((Player) sender).getInventory().getItemInMainHand(); //유저가 들고 있는 아이템 정보 가져오기
ItemStack giveItem = new ItemStack(tempItem); //유저가 가지고 있던 아이템 복사
int value = 0; //아이템 갯수
if (strings.length >= 1) { //strings 값이 있는지 확인
if (strings[0].equals("now")) { //딜레이 없이 바로 지급 하고자 한다면, 아니라면 바로 일반 명령어로 넘어감
if (strings.length == 1) { //값이 없으면 기본 값 1
value = 1;
} else {
value = Integer.parseInt(strings[1]);
}
giveItem.setAmount(value); //유저가 입력한 아이텝 지금 갯수를 등록
giveAll(giveItem);
return true; //다음으로 넘어가지 않도록 return
}
}
if (strings.length < 1) { //갯수 값이 없으면 기본 값 1
value = 1;
} else {
value = Integer.parseInt(strings[0]);
}
giveItem.setAmount(value);
//여기서 부턴 딜레이 후 아이템 지급
BukkitScheduler scheduler = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getServer().getScheduler();
scheduler.scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("HotTimeEvent"), new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(format + 5 + "초 후 지급!");
BukkitScheduler scheduler = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getServer().getScheduler();
scheduler.scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("HotTimeEvent"), new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(format + 4 + "초 후 지급!");
BukkitScheduler scheduler = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getServer().getScheduler();
scheduler.scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("HotTimeEvent"), new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(format + 3 + "초 후 지급!");
BukkitScheduler scheduler = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getServer().getScheduler();
scheduler.scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("HotTimeEvent"), new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(format + 2 + "초 후 지급!");
BukkitScheduler scheduler = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getServer().getScheduler();
scheduler.scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("HotTimeEvent"), new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(format + 1 + "초 후 지급!");
BukkitScheduler scheduler = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getServer().getScheduler();
scheduler.scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("HotTimeEvent"), new Runnable() {
@Override
public void run() {
giveAll(giveItem);
}
}, 20L);
}
}, 20L);
}
}, 20L);
}
}, 20L);
}
}, 20L);
}
}, 20L);
return true;
} else if (sender instanceof CommandSender) {
sender.sendMessage(format + "플레이어가 아닙니다.");
return true;
}
return false;
}
public void giveAll(ItemStack itemStack) {
String format = Bukkit.getPluginManager().getPlugin("HotTimeEvent").getConfig().getString("format");
Bukkit.broadcastMessage(format + "지급이 시작됩니다!");
for (Player player : Bukkit.getOnlinePlayers()) {
player.getInventory().addItem(itemStack);
player.sendMessage(format + player.getName() + "님 인벤토리로 아이템이 지급 되었습니다.");
}
Bukkit.broadcastMessage(format + "지급이 완료되었습니다!");
}
}
하나의 명령어에 기능을 두 가지를 넣었다.
/giveall now (갯수 defult: 1)
/giveall (갯수 defult: 1)
사진과 같이 정상적으로 지급되는 것을 알 수 있습니다.