프리
대표칭호 없음
BabyMandarinDuck c9790e9be5ed4d70b2e2270970bc8049
강좌 자바 에디션(JE) 플러그인 개발
플러그인의 PlayerMoveEvent와 스크립트의 on any move를 쓰지않고 걸은 블럭수를 측정해보자!
분야 | 스크립트 |
---|---|
게임버전 | 모든버전 |
1. 개요
마인크래프트 플러그인이나 스크립트를 개발할대 있어서 플레이어의 움직임을 감지하는 이벤트인 PlayerMoveEvent는 상당히 많은양의 렉을 초래합니다
그래서 이 이벤트를 사용하지않고 Spigot api의 Statistic 클래스를 이용하여 플레이어가 걸은 블럭수를 측정하는 방법을 알려드리도록하겠습니다
스피갓 공식 소스 홈페이지인 https://hub.spigotmc.org/ 를 참고하여찾았습니다
해당 구문은 Skript-Mirror를 이용하시면 Skript에서도 손쉽게 따라하실 수 있습니다
2. 필요한 클래스
- org.bukkit.Statistic
- org.bukkit.entity.Player
3. 필요한 라이브러리
- 없음
4. 코드 작성
메소드
public int getWalkBlock(Player player) { int totalblock; int fly = player.getStatistic(Statistic.valueOf("FLY_ONE_CM")); int fall = player.getStatistic(Statistic.valueOf("FALL_ONE_CM")); int walk = player.getStatistic(Statistic.valueOf("WALK_ONE_CM")); int sneak = player.getStatistic(Statistic.valueOf("SNEAK_ONE_CM")); int sprint = player.getStatistic(Statistic.valueOf("SPRINT_ONE_CM")); totalblock = fly + fall + walk + sneak + sprint; return totalblock/100; }
플레이어의 전체 블럭수를 측정하는 메소드입니다
fly fall walk sneak sprint 를 전부 더해준이유는 각 통계값이 따로따로 저장되기때문에
전부 더해줘야만 걸은 블럭수가 나오기 때문입니다
또한 마지막 리턴값에 100을 나눠준 이유는 100을 나눠야 "블럭수"로 나오기때문입니다
아마 cm단위까지 측정이 되는듯합니다
이제 해당 메소드를 이용하여 플레이어가 걸은 블럭수를 측정하는 방법에 대해 알아봅시다
대강 눈치채셨죠?
적용
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { Player player = (Player) sender; int totalblocks = (new GetWalkedBlock()).getWalkBlock(player); player.sendMessage(ChatColor.GOLD + "10초동안 걸으면 걸은 블럭수가 표시됩니다"); //대충 10초 딜레이 만들어주는 구문 int currentblocks = totalblocks - (new GetWalkedBlock()).getWalkBlock(player); return false; }
위에서 만들어준 메소드를 이용하여 이런식으로 만들어주었습니다
딜레이주는 구문은 따로 메소드가 더 필요하므로 넣지않고 주석으로만 표시했습니다
이 구문은 예시로 만들었으며 , 명령어를 입력하고 10초동안 걸으면 걸은 블럭수가 표시되는 구문입니다
자바배운지 1주가 조금넘어가는 초보입니다. 피드백은 언제나 환영입니다
1.12.2와 상위버전에 초점을 맞추어 제작되었습니다
DDang_
2020.02.16강의 감사합니다
haejeok
2021.10.26와 엄청 참신한거같네여