연습장

마인크래프트 플러그인 개발해보기 [11] - 광물 알람 플러그인 만들기 (2)

조강철10 2023. 8. 4. 02:00
반응형

마인크래프트 플러그인 개발해보기 [10] - 광물 알람 플러그인 만들기 (2)

 

https://gangchul.tistory.com/298

 

마인크래프트 플러그인 개발해보기 [10] - 광물 알람 플러그인 만들기 (1)

마인크래프트 플러그인 개발해보기 [10] - 광물 알람 플러그인 만들기 마인크래프트의 멀티서버를 즐겨하시는 분들이라면 , 위 사진과 같이 유저가 광물을 발견했다는 메시지를 보신 경험이 있

gangchul.tistory.com

이전 글에서, 블럭을 부쉈을 때 부순 블럭과 플레이어가 메시지로 출력되도록 했습니다.

이번엔 광물을 캐면, 메시지가 나오도록 하여 플러그인을 완성하겠습니다.

 

public class Alarm implements Listener {
    @EventHandler
    public void onBreak(BlockBreakEvent e){
        String player = e.getPlayer().getName();
        Material block = e.getBlock().getType();
        if(block==Material.COAL_ORE || block ==Material.DEEPSLATE_COAL_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.GRAY + "석탄 광석" + ChatColor.WHITE + " 을 발견하였습니다!");
        } else if(block==Material.IRON_ORE || block==Material.DEEPSLATE_IRON_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + "철 광석" + " 을 발견하였습니다!");
        } else if (block==Material.DIAMOND_ORE || block == Material.DEEPSLATE_DIAMOND_ORE) {
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.AQUA + "다이아몬드 광석" + ChatColor.WHITE + " 을 발견하였습니다!");
        } else if(block==Material.GOLD_ORE || block == Material.DEEPSLATE_GOLD_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.GOLD + "금 광석" + ChatColor.WHITE + " 을 발견하였습니다!");
        } else if(block==Material.EMERALD_ORE || block == Material.DEEPSLATE_EMERALD_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.GREEN + "에메랄드 광석" + ChatColor.WHITE + " 을 발견하였습니다!");
        } else if(block==Material.COPPER_ORE || block ==Material.DEEPSLATE_COPPER_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.YELLOW + ChatColor.BOLD+ "구리 광석" + ChatColor.WHITE + " 을 발견하였습니다!");
        }
    }
}

지난 번보다 코드가 많이 길어졌습니다.

광물은 일반 돌에 박힌 광물과, 심층암에 박힌 광석 두가지로 나눠집니다.

그래서 조건문에도 두가지 모두 써주었습니다.

 

 

 

 

성공!

 

여기서 더 나아가서, 찾아낸 광물의 개수도 표시하면 더 좋을 것 같습니다.

 

그래서 코드를 추가했습니다.

 

 

 

public class Alarm implements Listener {
    @EventHandler
    public void onBreak(BlockBreakEvent e){
        String player = e.getPlayer().getName();
        Material block = e.getBlock().getType();
        int x = e.getBlock().getX();
        int y = e.getBlock().getY();
        int z = e.getBlock().getZ();
        int count = 0;

        for(int i=x-3; i<=x+6; i++){
            for(int k=y-3; k<=y+6; k++){
                for(int j=z-3; j<=z+6; j++){
                    if(e.getBlock().getLocation().getWorld().getBlockAt(i,k,j).getType()==block){
                        count++;
                    }
                }
            }
        }

        if(block==Material.COAL_ORE || block ==Material.DEEPSLATE_COAL_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.GRAY + "석탄 광석" + ChatColor.WHITE + " " + count +" 개를 발견하였습니다!");
        } else if(block==Material.IRON_ORE || block==Material.DEEPSLATE_IRON_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + "철 광석" + " 을 발견하였습니다!");
        } else if (block==Material.DIAMOND_ORE || block == Material.DEEPSLATE_DIAMOND_ORE) {
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.AQUA + "다이아몬드 광석" + ChatColor.WHITE + " " + count +" 개를 발견하였습니다!" );
        } else if(block==Material.GOLD_ORE || block == Material.DEEPSLATE_GOLD_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.GOLD + "금 광석" + ChatColor.WHITE + count + " " +" 개를 발견하였습니다!" );
        } else if(block==Material.EMERALD_ORE || block == Material.DEEPSLATE_EMERALD_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.GREEN + "에메랄드 광석" + ChatColor.WHITE + " " + count +" 개를 발견하였습니다!" );
        } else if(block==Material.COPPER_ORE || block ==Material.DEEPSLATE_COPPER_ORE){
            Bukkit.getServer().broadcastMessage(player + " 님이 " + ChatColor.YELLOW + ChatColor.BOLD+ "구리 광석" + ChatColor.WHITE+ " " + count +" 개를 발견하였습니다!" );
        }
    }
}

 

 

 

 

발견한 광물의 개수도 출력이 됩니다.

하지만 문제는 블럭을 부술때마다 남은 블럭의 갯수가 나온다는 겁니다.

 

이걸 해결할 방법은 아직 찾지 못했습니다..

찾으면 글을 올리겠습니다!

반응형