Event - noonmaru/psychics GitHub Wiki

์ด ํŽ˜์ด์ง€๋Š” Ability์—์„œ Event๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๊ฐœ์š”

Bukkit plugin์„ ๋‹ค๋ค„๋ณด์‹ ๋ถ„๋“ค์€ Event listener์˜ ๊ฐœ๋…์„ ์•Œ๊ณ ๊ณ„์‹ค๊ฒ๋‹ˆ๋‹ค.

Event listener๋Š” ํŠน์ • ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•  ๋•Œ (๋ธ”๋ก ์„ค์น˜, ๋ธ”๋ก ํŒŒ๊ดด, ํ”Œ๋ ˆ์ด์–ด ์ ‘์† ๋“ฑ) ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Psychics์—์„œ๋„ ์ด์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Tap์˜ EntityEventManager ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Šฅ๋ ฅ ์‚ฌ์šฉ์ž์˜ Event๋ฅผ ์ˆ˜์‹  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Listener ํด๋ž˜์Šค ์ œ์ž‘ํ•˜๊ธฐ

Hello Ability!์—์„œ ๋งŒ๋“  Ability ํด๋ž˜์Šค๋ฅผ ์—ด์–ด์„œ Listener๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.

Bukkit์˜ Listener์ œ์ž‘ ๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

class MyAbilityListener : Listener {
    @EventHandler
    fun onPlayerInteract(event: PlayerInteractEvent) {
        if (event.action == Action.LEFT_CLICK_AIR) {
            event.player.sendMessage("๋Šฅ๋ ฅ ์‚ฌ์šฉ์ž๊ฐ€ ์™ผ์†์„ ํœ˜๋‘˜๋ €๋‹ค.")
        }
    }
}

Listener ๋“ฑ๋กํ•˜๊ธฐ

MyAbilityListener ๋ฅผ ์ œ์ž‘ ํ›„ ๋“ฑ๋กํ•ด์•ผ Event๋ฅผ ์ˆ˜์‹ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ability ํด๋ž˜์Šค์—์„œ onEnableํ•จ์ˆ˜๋ฅผ Overrideํ•˜๊ณ  psychic์— registerEvents ํ•จ์ˆ˜๋กœ MyAbilityListener ์ „๋‹ฌํ•˜์„ธ์š”.

ps. psychic์€ Ability ์ธ์Šคํ„ด์Šค๋ฅผ ์†Œ์œ ํ•˜๊ณ ์žˆ๋Š” Psychic ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. ๋’ท ํŽ˜์ด์ง€์—์„œ ๋‹ค์‹œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Test

๋‹ค์‹œ ๋นŒ๋“œํ•˜์—ฌ ์„œ๋ฒ„์— ์ ์šฉํ•ด๋ด…์‹œ๋‹ค.

์ฐธ์กฐ ์ž‘์„ฑํ•˜๊ธฐ

psychicํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

myfirstpsychic.yml

abilities:
  myfirstability:
    ability: .myability

myfirstpsychic์ด ์ •์ƒ์ ์œผ๋กœ ๋กœ๋”ฉ๋์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋กœ ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ psychics attach <player> myfirstpsychic ๋ช…๋ น์œผ๋กœ ๋Šฅ๋ ฅ์„ ์ ์šฉํ•ด๋ด…์‹œ๋‹ค.

์™ผ์†์„ ํœ˜๋‘๋ฅผ๋•Œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜ค๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Provider

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
    }
}

Tip

psychic ์— ๋“ฑ๋ก๋œ listener ๋Š” ๋Šฅ๋ ฅ์ด ๋น„ํ™œ์„ฑํ™”๋  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ