Event - noonmaru/psychics GitHub Wiki
์ด ํ์ด์ง๋ Ability์์ Event๋ฅผ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ค๋ฃน๋๋ค.
Bukkit plugin์ ๋ค๋ค๋ณด์ ๋ถ๋ค์ Event listener์ ๊ฐ๋ ์ ์๊ณ ๊ณ์ค๊ฒ๋๋ค.
Event listener๋ ํน์ ์ฌ๊ฑด์ด ๋ฐ์ํ ๋ (๋ธ๋ก ์ค์น, ๋ธ๋ก ํ๊ดด, ํ๋ ์ด์ด ์ ์ ๋ฑ) ํด๋น ์ ๋ณด๋ฅผ ์์ ํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค.
Psychics์์๋ ์ด์ ๋น์ทํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Tap์ EntityEventManager ํด๋์ค๋ฅผ ํ์ฉํ์ฌ ๋ฅ๋ ฅ ์ฌ์ฉ์์ Event๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
Hello Ability!์์ ๋ง๋ Ability ํด๋์ค๋ฅผ ์ด์ด์ Listener๋ฅผ ๋ง๋ค์ด๋ณด์ธ์.
Bukkit์ Listener์ ์ ๋ฐฉ๋ฒ๊ณผ ๋์ผํฉ๋๋ค.
class MyAbilityListener : Listener {
@EventHandler
fun onPlayerInteract(event: PlayerInteractEvent) {
if (event.action == Action.LEFT_CLICK_AIR) {
event.player.sendMessage("๋ฅ๋ ฅ ์ฌ์ฉ์๊ฐ ์ผ์์ ํ๋๋ ๋ค.")
}
}
}
MyAbilityListener ๋ฅผ ์ ์ ํ ๋ฑ๋กํด์ผ Event๋ฅผ ์์ ๋ฐ์ ์ ์์ต๋๋ค.
Ability ํด๋์ค์์ onEnableํจ์๋ฅผ Overrideํ๊ณ psychic์ registerEvents ํจ์๋ก MyAbilityListener ์ ๋ฌํ์ธ์.
ps. psychic์ Ability ์ธ์คํด์ค๋ฅผ ์์ ํ๊ณ ์๋ Psychic ์ธ์คํด์ค์ ๋๋ค. ๋ท ํ์ด์ง์์ ๋ค์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๋ค์ ๋น๋ํ์ฌ ์๋ฒ์ ์ ์ฉํด๋ด ์๋ค.
์ฐธ์กฐ ์์ฑํ๊ธฐ
psychicํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
abilities:
myfirstability:
ability: .myability
myfirstpsychic์ด ์ ์์ ์ผ๋ก ๋ก๋ฉ๋์ต๋๋ค.
์ด์ ๋ง์ธํฌ๋ํํธ๋ก ์๋ฒ์ ์ ์ํด์ psychics attach <player> myfirstpsychic
๋ช
๋ น์ผ๋ก ๋ฅ๋ ฅ์ ์ ์ฉํด๋ด
์๋ค.
์ผ์์ ํ๋๋ฅผ๋ ๋ฉ์์ง๊ฐ ๋์ค๋๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
psychic์ ๋ฑ๋ก๋ listener ๋ ๋ฅ๋ ฅ ์ฌ์ฉ์์ Event๋ง์ ์์ ํฉ๋๋ค.
๋๋ถ๋ถ์ Event๋ EntityEventManager ์์ Event์ Entity๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ํจ์๋ฅผ ํธ์ถํด์ค๋๋ค.
ํ์ง๋ง Custom Event ํน์ ์ด๋ฒคํธ์ Entity๋ฅผ EntityEventManager์์ ๊ตฌ๋ณํ ์ ์๋ ๊ฒฝ์ฐ Provider๋ฅผ ์ ์ฉํด์ผํฉ๋๋ค.
@TargetEntity๋ฅผ Event ์์ ํจ์์ ๋ถ์ฌ์ ์ฌ์ฉํฉ๋๋ค.
class MyAbility : Ability<AbilityConcept>() {
override fun onEnable() {
psychic.registerEvents(MyAbilityListener())
}
}
class MyAbilityListener : Listener {
@EventHandler
@TargetEntity(KillerProvider::class)
fun onPlayerKill(event: EntityDeathEvent) {
event.drops.add(ItemStack(Material.STONE))
}
// ๋ฅ๋ ฅ ์ฌ์ฉ์๊ฐ Entity๋ฅผ ์ฃฝ์ผ๋ ๋๋ ์์ดํ
์ ๋์ ์ถ๊ฐ
}
class KillerProvider : EntityProvider<EntityDeathEvent> {
override fun getFrom(event: EntityDeathEvent): Entity? {
return event.entity.killer
}
}
psychic ์ ๋ฑ๋ก๋ listener ๋ ๋ฅ๋ ฅ์ด ๋นํ์ฑํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ ๊ฑฐ๋ฉ๋๋ค.