1+ package io.github.rothes.esu.bukkit.module.essentialcommands
2+
3+ import io.github.rothes.esu.bukkit.user
4+ import io.github.rothes.esu.bukkit.util.ComponentBukkitUtils.player
5+ import io.github.rothes.esu.bukkit.util.extension.ListenerExt.register
6+ import io.github.rothes.esu.bukkit.util.extension.ListenerExt.unregister
7+ import io.github.rothes.esu.core.configuration.data.MessageData
8+ import io.github.rothes.esu.core.configuration.data.MessageData.Companion.message
9+ import io.github.rothes.esu.core.module.configuration.FeatureToggle
10+ import io.github.rothes.esu.core.user.User
11+ import org.bukkit.entity.Player
12+ import org.bukkit.event.EventHandler
13+ import org.bukkit.event.Listener
14+ import org.bukkit.event.entity.EntityDamageEvent
15+ import org.bukkit.event.player.PlayerQuitEvent
16+ import java.util.concurrent.ConcurrentHashMap
17+
18+ object NoFall : PlayerOptionalCommand<FeatureToggle.DefaultTrue, NoFall.Lang>() {
19+
20+ private val players = ConcurrentHashMap .newKeySet<Player >()
21+
22+ override fun onEnable () {
23+ super .onEnable()
24+ Listeners .register()
25+ }
26+
27+ override fun onDisable () {
28+ super .onDisable()
29+ Listeners .unregister()
30+ players.clear()
31+ }
32+
33+ override fun onPerform (sender : User , player : Player , silent : Boolean ) {
34+ if (players.add(player)) {
35+ sender.message(lang, { enabledForPlayer }, player(player))
36+ if (! silent)
37+ player.user.message(lang, { enabled })
38+ } else {
39+ players.remove(player)
40+ sender.message(lang, { disabledForPlayer }, player(player))
41+ if (! silent)
42+ player.user.message(lang, { disabled })
43+ }
44+ }
45+
46+ private object Listeners: Listener {
47+ @EventHandler
48+ fun onFallDamage (e : EntityDamageEvent ) {
49+ if (e.cause == EntityDamageEvent .DamageCause .FALL && players.contains(e.entity)) {
50+ e.isCancelled = true
51+ }
52+ }
53+
54+ @EventHandler
55+ fun onQuit (e : PlayerQuitEvent ) {
56+ players.remove(e.player)
57+ }
58+ }
59+
60+ data class Lang (
61+ val enabledForPlayer : MessageData = " <vpc>Enabled <pc>no fall for <pdc><player><pc>." .message,
62+ val disabledForPlayer : MessageData = " <vnc>Disabled <pc>no fall for <pdc><player><pc>." .message,
63+ val enabled : MessageData = " <pc>You no longer receives fall damage." .message,
64+ val disabled : MessageData = " <pc>You are now receiving fall damage." .message,
65+ )
66+
67+ }
0 commit comments