연습장
마인크래프트 플러그인 개발해보기 [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 +" 개를 발견하였습니다!" );
}
}
}
발견한 광물의 개수도 출력이 됩니다.
하지만 문제는 블럭을 부술때마다 남은 블럭의 갯수가 나온다는 겁니다.
이걸 해결할 방법은 아직 찾지 못했습니다..
찾으면 글을 올리겠습니다!
반응형