개인 자료란 (JE)

  서버 커뮤니티

Profile jjambbong0209 대표칭호 없음

0209jjambbong 903859c50bcd4e8bad5d8fdc8b1c337d

Profile

질문하기 스크립트

도전과제 감지

2021.07.12 조회 수 1111 추천 수 0
이해도 1.16 
게임버전 (JE) 스피곳 

도전과제를 깨면 감지해서 실행하는 구문이 있나요?

3개의 댓글

스크립터브혼
2021.07.13

추천하는 방식은 아닙니다만.. DDang_님이 알려주신 애드온으로 안된다면 [skript-reflect]로 구현 할 수 도 있긴합니다.

reflect 애드온 추가 한 뒤 아래의 코드를 작성하시면 됩니다.


먼저 reflect로 구현한 커스텀 이벤트와 익스프레션입니다.

# file name is _reflect.sk

import:
    org.bukkit.event.player.PlayerAdvancementDoneEvent
on PlayerAdvancementDoneEvent:
    set {_type::player} to event.getPlayer()
    set {_type::location} to event.getPlayer().getLocation()
    set {_type::world} to event.getPlayer().getWorld()
    set {_data::namespaced_key} to event.getAdvancement().getKey().asString()
    set {_event} to new custom event "PlayerAdvancementDoneEvent" with {_type::*} data {_data::*}
    call {_event}
event "PlayerAdvancementDoneEvent":
    pattern: advancement (complete|done)
    event-values: player, location, world
expression [event-]advancement[[ namespace] key]:
    return type: text
    usable in:
        custom event "PlayerAdvancementDoneEvent"
    get:
        return event.getData("namespaced_key")

이 reflect 코드는 수정없이 복사 + 붙여넣기로 가져가시면 됩니다.

주의하실 부분은 reflect로 구현된 코드가 사용된 코드보다 먼저 서버에 로드되어야 합니다.


한 파일에 작성할 시 reflect 코드를 위에, 사용된 코드를 아래에 배치해야합니다.


reflect 코드를 다른 파일에 저장 할 경우는

파일을 읽는 순서가 문자(특수문자 > 숫자 > a-z > 가-힣)  순서대로 로드 한 후, 하위 폴더를 읽기 때문에

파일 이름의 첫글자에 특수문자를 추가하여 가장 먼저 로드 되게 하거나,

구현된 코드를 사용한 스크립트를 폴더에 넣어 나중에 로드되로록 세팅하셔야 합니다.


# @reflect event - advancement complete
on advancement complete:
    advancement is "minecraft:story/smelt_iron"
    send "철이 철철 넘쳐 발전과제 완료!"

구현된 커스텀 이벤트와 익스프레션은 이렇게 사용됩니다.

event-advancement는 완료한 도전과제의 NamespacedKey를 글자로 반환합니다.

도전과제 NamespacedKey는 [Advancement Wiki]를 참고하세요.

jjambbong0209
2021.07.13
@스크립터브혼

감사합니다