팬달03
대표칭호 없음
이해도 | 입문자 |
---|---|
게임버전 (JE) | 관련없음 |
게임버전 (BE) | 관련없음 |
플러그인을 이용하여 온라인 플레이어들에게 겹치지 않는 랜덤한 색의 양털을 지급하려 합니다.
온라인 플레이어들에게 아이템을 지급하는 코드까지 짠 상태이고(친구가 자는 중이라 실험은 못해봤습니다),
겹치지 않는 랜덤한 색의 양털을 지급하는 방법이 궁금합니다.
아래는 코드입니다.
package me.pandal.randomwool; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import static org.bukkit.Material.*; public final class Randomwool extends JavaPlugin implements Listener, CommandExecutor { public void onEnable() { getLogger().info("랜덤양털 정상작동"); getServer().getPluginManager().registerEvents(this, this); this.getCommand("랜덤게임").setExecutor(this); } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { Player player = (Player) sender; ItemStack red_wool = new ItemStack(Material.RED_WOOL); ItemStack orange_wool = new ItemStack(ORANGE_WOOL); ItemStack yellow_wool = new ItemStack(YELLOW_WOOL); ItemStack green_wool = new ItemStack(GREEN_WOOL); red_wool.setAmount(8); for (Player all : Bukkit.getOnlinePlayers()) if (cmd.getName().equalsIgnoreCase("랜덤게임")) { if (args.length == 0) { player.sendMessage(ChatColor.GREEN + "양털 색 확인!!"); } else if(args[0].equalsIgnoreCase("random")){ int random = (int) (Math.random() * 4); switch (random) { case 0: player.getInventory().addItem(red_wool); break; case 1: player.getInventory().addItem(orange_wool); break; case 2: player.getInventory().addItem(yellow_wool); break; case 3: player.getInventory().addItem(green_wool); break; default: player.sendMessage(ChatColor.RED+"WARNING 오류 발생!!"); break; } } } return false; } }
lanthanide
2024.07.24답변 이전에 코드에 문제가 하나 있습니다. 지금 코드는 모든 양털을 명령어 실행자에게 지급합니다. 위 코드에서는
player.getInventory().addItem(...)
이 아니라
all.getInventory().addItem(...)
을 사용하시는 게 맞습니다. 아니면 아예 player를 sender로 정의하지 말고 for문 안에서 all 대신 player라는 이름을 쓰든지요.모든 양털이 겹치지 않게 하고자 한다면 양털을 랜덤으로 지급할 게 아니라, 플레이어 목록을 순회하면서 순서대로 빨강, 파랑, 초록... 색의 양털을 주면 되는 것 아닌가요? 양털을 모두 담은 리스트인 woolList: List<ItemStack>를 만들고 첫 번째 플레이어에겐 woolList[0], 두 번째 플레이어에센 woolList[1]을 주는 식으로 작성하면 될 것 같습니다.
명령어 실행시마다 각 플레이어에게 주는 양털이 고정되어 있다면 for문 이전에 두 리스트 중 하나를 랜덤하게 섞으면 될 것이고요.
또, 플레이어 수가 양털 수보다 많은 경우는 예외처리를 하셔야 합니다. woolList를 다시 처음부터 돌리거나 아예 명령어 실행을 끊고 에러를 보여주어야 하겠지요.
팬달03
2024.07.24아이고 자세히 알려주셔서 고맙습니다!
다시 열심히 만들어보겠습니다!
팬달03
2024.07.25인터넷 보면서 해봤는데 List 이렇게 하는 게 맞을까요?
lanthanide
2024.07.25http://tpcg.io/_Y4IAUF
실행해보니 잘 되네요.
팬달03
2024.07.25헤헤 고맙습니다 :b