-
Notifications
You must be signed in to change notification settings - Fork 20
Fake entity
Noonmaru edited this page Oct 8, 2020
·
2 revisions
더욱 풍부한 Ability의 능력을 표현하기 위해 Tap의 FakeEntity 기능을 사용합니다.
FakeEntity는 서버 내 실제 Entity를 생성하지 않고 클라이언트에만 보이는 Entity 를 제공합니다.
class MyAbility : Ability<AbilityConcept>() {
var fakeEntity: FakeEntity? = null
override fun onEnable() {
// FakeEntity 생성
fakeEntity = psychic.spawnFakeEntity(getFakeEntityLocation(), ArmorStand::class.java).apply {
updateMetadata<ArmorStand> { // ArmorStand로 캐스팅하여 속성 업데이트
isVisible = false
}
updateEquipment { // 장비 업데이트
helmet = ItemStack(Material.STONE)
}
}
psychic.runTaskTimer({
// 1 tick 마다 16칸 눈앞으로 이동
fakeEntity?.moveTo(getFakeEntityLocation())
}, 0L, 1L)
}
override fun onDisable() {
// 제거
fakeEntity?.let { fakeEntity ->
fakeEntity.remove()
this.fakeEntity = null
}
}
// 보는 방향 16칸 앞
private fun getFakeEntityLocation(): Location {
return esper.player.eyeLocation.apply {
add(direction.multiply(16.0))
}
}
}
PsychicProjectile과 함께 사용하면 자연스러운 투사체를 표현할 수 있습니다.
psychic.spawnFakeEntity를 통해 FakeEntity를 생성하게 되면 Psychic 인스턴스 내부의 WeakReference로 관리됩니다.
능력 제거시 자동으로 FakeEntity로 제거되며 모든 레퍼런스가 초기화됩니다.