Hinoto_04
대표칭호 없음
이해도 | 플러그인 |
---|---|
게임버전 (JE) | 버킷 |
플러그인 만들기 위해 플러그인만을 위한 자바 공부를 시작한 초보 개발자입니다.
SMM2에 있는 많은 기능들을 마인크래프트에 구현하고자 플러그인 작업중인데,
이번에 구현하고 있는 것이 ON / OFF 블록 및 스위치입니다.
때렸을 때 ON/OFF를 바꾸기 위해 코드를 만들었는데,
모든 월드의 모든 엔티티를 대상으로 한 코드를 어떻게 짜는 지 모르겠네요.
하나의 스위치를 건들이면 모든 양의 색깔이 변해야 하는데,
이게 지옥에 있을 수도 엔드에 있을 수도 있어서,
어떻게 해야할 지 알려주실 분 찾습니다.
일단 대미지 감지이다보니 Invulnerable을 안썼습니다.
대신 Absorption(흡수)를 10000으로 부여했습니다.(이게 setAbsorptionAmount로 되는지는 모르겠습니다)
(Sheep이라서 maxHealth가 취소선처리되더라구요.)
아래는 ON/OFF 스위치 양이 피해를 입었을 때 작동되는 코드입니다.
블레이즈 막대로 때리면 ON/OFF스위치를 제거하기 위해서 만들어뒀습니다.
현재 boolean isOn이 이벤트 핸들러 밖에 있는 상태입니다.
@EventHandler public void OnOffSwitchClick(EntityDamageByEntityEvent e) { Sheep en = (Sheep)e.getEntity(); if (en.getName().equals(ChatColor.RED + "ON" + ChatColor.WHITE + "/" + ChatColor.BLUE + "OFF" + ChatColor.WHITE + "스위치")) { if (e.getDamager() instanceof Player) { Player p = (Player) e.getDamager(); if (p.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.RED + "ON" + ChatColor.WHITE + "/" + ChatColor.BLUE + "OFF" + ChatColor.WHITE + "스위치")) { en.damage(100000); return; } } if(isOn==true) { off(); } else { on(); } en.setAbsorptionAmount(10000); } }
혹시 다른 문제점 발견하셔도 지적 부탁드립니다.
분열
2020.03.21for each문을 이용해 서버에 있는 모든 월드 목록을 하나하나씩 가져온 다음, 가져온 월드의 모든 엔티티를 for each문으로 비교하시면 될것 같습니다.
Hinoto_04
2020.03.22getServer를 잊고 있었네요, 감사합니다
펜델(skyneton)
2020.03.22Sheep 형태로 바로 가져오시지 마시고 먼저 양인지 확인후 가져오세요
Hinoto_04
2020.03.22public void OnOffSwitchClick(EntityDamageByEntityEvent e) { Sheep en = (Sheep)e.getEntity();
를 Sheep으로 가져오지 말고
public void OnOffSwitchClick(EntityDamageByEntityEvent e) { if(e.getEntity()==EntityType.SHEEP) { Sheep en = (Sheep)e.getEntity(); }
로 양인지 확인하고 양으로 가져와야된다는거죠?
펜델(skyneton)
2020.03.23네