From e33d3264d889ff301e205a62c29609e376207315 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 14 Sep 2022 13:12:47 +0100 Subject: [PATCH] Added PlayerJobJoinEvent and PlayerJobLeaveEvent --- .../ecojobs/api/event/PlayerJobJoinEvent.kt | 30 +++++++++++++++++++ .../ecojobs/api/event/PlayerJobLeaveEvent.kt | 29 ++++++++++++++++++ .../kotlin/com/willfp/ecojobs/jobs/Job.kt | 30 ++++++++++++++++++- 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobJoinEvent.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobLeaveEvent.kt diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobJoinEvent.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobJoinEvent.kt new file mode 100644 index 0000000..e269ddc --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobJoinEvent.kt @@ -0,0 +1,30 @@ +package com.willfp.ecojobs.api.event + +import com.willfp.ecojobs.jobs.Job +import org.bukkit.entity.Player +import org.bukkit.event.Cancellable +import org.bukkit.event.HandlerList +import org.bukkit.event.player.PlayerEvent + +class PlayerJobJoinEvent( + who: Player, + val job: Job, + val oldJob: Job? +) : PlayerEvent(who), Cancellable { + private var cancelled = false + + override fun isCancelled() = this.cancelled + + override fun setCancelled(cancelled: Boolean) { + this.cancelled = cancelled + } + + override fun getHandlers(): HandlerList { + return handlerList + } + + companion object { + @JvmStatic + val handlerList = HandlerList() + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobLeaveEvent.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobLeaveEvent.kt new file mode 100644 index 0000000..2e516ac --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/api/event/PlayerJobLeaveEvent.kt @@ -0,0 +1,29 @@ +package com.willfp.ecojobs.api.event + +import com.willfp.ecojobs.jobs.Job +import org.bukkit.entity.Player +import org.bukkit.event.Cancellable +import org.bukkit.event.HandlerList +import org.bukkit.event.player.PlayerEvent + +class PlayerJobLeaveEvent( + who: Player, + val job: Job +) : PlayerEvent(who), Cancellable { + private var cancelled = false + + override fun isCancelled() = this.cancelled + + override fun setCancelled(cancelled: Boolean) { + this.cancelled = cancelled + } + + override fun getHandlers(): HandlerList { + return handlerList + } + + companion object { + @JvmStatic + val handlerList = HandlerList() + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/jobs/Job.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/jobs/Job.kt index 216afdd..162454d 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/jobs/Job.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/jobs/Job.kt @@ -15,6 +15,8 @@ import com.willfp.eco.util.formatEco import com.willfp.eco.util.toNiceString import com.willfp.ecojobs.EcoJobsPlugin import com.willfp.ecojobs.api.event.PlayerJobExpGainEvent +import com.willfp.ecojobs.api.event.PlayerJobJoinEvent +import com.willfp.ecojobs.api.event.PlayerJobLeaveEvent import com.willfp.ecojobs.api.event.PlayerJobLevelUpEvent import com.willfp.libreforge.conditions.Conditions import com.willfp.libreforge.conditions.ConfiguredCondition @@ -365,7 +367,33 @@ private val activeJobKey: PersistentDataKey = PersistentDataKey( var OfflinePlayer.activeJob: Job? get() = Jobs.getByID(this.profile.read(activeJobKey)) - set(value) = this.profile.write(activeJobKey, value?.id ?: "") + set(job) { + val oldJob = this.activeJob + + if (oldJob != job) { + // Have to check for oldJob too to have null safety + if (job == null && oldJob != null) { + val event = PlayerJobLeaveEvent(player, oldJob) + Bukkit.getPluginManager().callEvent(event) + + if (event.isCancelled) { + return + } + } + + // Not using else because null safety as well + if (job != null) { + val event = PlayerJobJoinEvent(player, job, oldJob) + Bukkit.getPluginManager().callEvent(event) + + if (event.isCancelled) { + return + } + } + } + + this.profile.write(activeJobKey, job?.id ?: "") + } val OfflinePlayer.activeJobLevel: JobLevel? get() {