From b9e67b55ec7a0b674449fad00e01479a76c2b0c0 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 28 Mar 2023 19:13:24 +0100 Subject: [PATCH] Moved integration --- .../com/willfp/ecojobs/EcoJobsPlugin.kt | 23 +++++++++++++ .../libreforge/ConditionHasActiveJob.kt | 18 +++++++++++ .../libreforge/ConditionHasJobLevel.kt | 31 ++++++++++++++++++ .../ecojobs/libreforge/EffectGiveJobXp.kt | 32 +++++++++++++++++++ .../libreforge/EffectJobXpMultiplier.kt | 24 ++++++++++++++ .../willfp/ecojobs/libreforge/FilterJob.kt | 21 ++++++++++++ .../ecojobs/libreforge/TriggerGainJobXp.kt | 30 +++++++++++++++++ .../ecojobs/libreforge/TriggerJoinJob.kt | 32 +++++++++++++++++++ .../ecojobs/libreforge/TriggerLeaveJob.kt | 30 +++++++++++++++++ .../ecojobs/libreforge/TriggerLevelUpJob.kt | 30 +++++++++++++++++ gradle.properties | 2 +- 11 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasActiveJob.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasJobLevel.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectGiveJobXp.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectJobXpMultiplier.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/FilterJob.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerGainJobXp.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerJoinJob.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLeaveJob.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLevelUpJob.kt diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/EcoJobsPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/EcoJobsPlugin.kt index f48c96e..b8dff0e 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/EcoJobsPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/EcoJobsPlugin.kt @@ -14,10 +14,23 @@ import com.willfp.ecojobs.jobs.JobLevelListener import com.willfp.ecojobs.jobs.Jobs import com.willfp.ecojobs.jobs.PriceHandler import com.willfp.ecojobs.jobs.ResetOnQuitListener +import com.willfp.ecojobs.libreforge.ConditionHasActiveJob +import com.willfp.ecojobs.libreforge.ConditionHasJobLevel +import com.willfp.ecojobs.libreforge.EffectGiveJobXp +import com.willfp.ecojobs.libreforge.EffectJobXpMultiplier +import com.willfp.ecojobs.libreforge.FilterJob +import com.willfp.ecojobs.libreforge.TriggerGainJobXp +import com.willfp.ecojobs.libreforge.TriggerJoinJob +import com.willfp.ecojobs.libreforge.TriggerLeaveJob +import com.willfp.ecojobs.libreforge.TriggerLevelUpJob import com.willfp.libreforge.SimpleProvidedHolder +import com.willfp.libreforge.conditions.Conditions +import com.willfp.libreforge.effects.Effects +import com.willfp.libreforge.filters.Filters import com.willfp.libreforge.loader.LibreforgePlugin import com.willfp.libreforge.loader.configs.ConfigCategory import com.willfp.libreforge.registerHolderProvider +import com.willfp.libreforge.triggers.Triggers import org.bukkit.event.Listener import java.util.regex.Pattern @@ -33,6 +46,16 @@ class EcoJobsPlugin : LibreforgePlugin() { } override fun handleEnable() { + Conditions.register(ConditionHasJobLevel) + Conditions.register(ConditionHasActiveJob) + Effects.register(EffectJobXpMultiplier) + Effects.register(EffectGiveJobXp) + Triggers.register(TriggerGainJobXp) + Triggers.register(TriggerLevelUpJob) + Triggers.register(TriggerJoinJob) + Triggers.register(TriggerLeaveJob) + Filters.register(FilterJob) + registerHolderProvider { player -> player.activeJobs.map { it.getLevel(player.getJobLevel(it)) }.map { SimpleProvidedHolder(it) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasActiveJob.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasActiveJob.kt new file mode 100644 index 0000000..95499e6 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasActiveJob.kt @@ -0,0 +1,18 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.eco.core.config.interfaces.Config +import com.willfp.ecojobs.api.activeJobs +import com.willfp.libreforge.NoCompileData +import com.willfp.libreforge.arguments +import com.willfp.libreforge.conditions.Condition +import org.bukkit.entity.Player + +object ConditionHasActiveJob : Condition("has_active_job") { + override val arguments = arguments { + require("job", "You must specify the job!") + } + + override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean { + return player.activeJobs.any { it.id == config.getString("job").lowercase() } + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasJobLevel.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasJobLevel.kt new file mode 100644 index 0000000..939c261 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/ConditionHasJobLevel.kt @@ -0,0 +1,31 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.eco.core.config.interfaces.Config +import com.willfp.ecojobs.api.event.PlayerJobLevelUpEvent +import com.willfp.ecojobs.api.getJobLevel +import com.willfp.ecojobs.jobs.Jobs +import com.willfp.libreforge.NoCompileData +import com.willfp.libreforge.arguments +import com.willfp.libreforge.conditions.Condition +import com.willfp.libreforge.updateEffects +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority + +object ConditionHasJobLevel : Condition("has_job_level") { + override val arguments = arguments { + require("job", "You must specify the job!") + require("level", "You must specify the level!") + } + + override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean { + return player.getJobLevel( + Jobs.getByID(config.getString("job").lowercase()) ?: return false + ) >= config.getIntFromExpression("level", player) + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + fun handle(event: PlayerJobLevelUpEvent) { + event.player.updateEffects() + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectGiveJobXp.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectGiveJobXp.kt new file mode 100644 index 0000000..1bfa490 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectGiveJobXp.kt @@ -0,0 +1,32 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.eco.core.config.interfaces.Config +import com.willfp.ecojobs.api.giveJobExperience +import com.willfp.ecojobs.jobs.Jobs +import com.willfp.libreforge.NoCompileData +import com.willfp.libreforge.arguments +import com.willfp.libreforge.effects.Effect +import com.willfp.libreforge.triggers.TriggerData +import com.willfp.libreforge.triggers.TriggerParameter + +object EffectGiveJobXp : Effect("give_job_xp") { + override val parameters = setOf( + TriggerParameter.PLAYER + ) + + override val arguments = arguments { + require("amount", "You must specify the amount of xp to give!") + require("job", "You must specify the job to give xp for!") + } + + override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean { + val player = data.player ?: return false + + player.giveJobExperience( + Jobs.getByID(config.getString("job")) ?: return false, + config.getDoubleFromExpression("amount", player) + ) + + return true + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectJobXpMultiplier.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectJobXpMultiplier.kt new file mode 100644 index 0000000..a7ec02a --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/EffectJobXpMultiplier.kt @@ -0,0 +1,24 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.ecojobs.api.event.PlayerJobExpGainEvent +import com.willfp.ecojobs.jobs.Job +import com.willfp.ecojobs.jobs.Jobs +import com.willfp.libreforge.effects.templates.MultiMultiplierEffect +import org.bukkit.event.EventHandler + +object EffectJobXpMultiplier : MultiMultiplierEffect("job_xp_multiplier") { + override val key = "jobs" + + override fun getElement(key: String): Job? { + return Jobs.getByID(key) + } + + override fun getAllElements(): Collection { + return Jobs.values() + } + + @EventHandler(ignoreCancelled = true) + fun handle(event: PlayerJobExpGainEvent) { + event.amount *= getMultiplier(event.player, event.job) + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/FilterJob.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/FilterJob.kt new file mode 100644 index 0000000..e37ca87 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/FilterJob.kt @@ -0,0 +1,21 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.eco.core.config.interfaces.Config +import com.willfp.ecojobs.api.event.JobEvent +import com.willfp.libreforge.NoCompileData +import com.willfp.libreforge.filters.Filter +import com.willfp.libreforge.triggers.TriggerData + +object FilterJob : Filter>("job") { + override fun getValue(config: Config, data: TriggerData?, key: String): Collection { + return config.getStrings(key) + } + + override fun isMet(data: TriggerData, value: Collection, compileData: NoCompileData): Boolean { + val event = data.event as? JobEvent ?: return true + + return value.any { jobName -> + jobName.equals(event.job.id, ignoreCase = true) + } + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerGainJobXp.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerGainJobXp.kt new file mode 100644 index 0000000..fe4cd16 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerGainJobXp.kt @@ -0,0 +1,30 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.ecojobs.api.event.PlayerJobExpGainEvent +import com.willfp.libreforge.triggers.Trigger +import com.willfp.libreforge.triggers.TriggerData +import com.willfp.libreforge.triggers.TriggerParameter +import org.bukkit.event.EventHandler + +object TriggerGainJobXp : Trigger("gain_job_xp") { + override val parameters = setOf( + TriggerParameter.PLAYER, + TriggerParameter.LOCATION, + TriggerParameter.EVENT + ) + + @EventHandler(ignoreCancelled = true) + fun handle(event: PlayerJobExpGainEvent) { + val player = event.player + + this.dispatch( + player, + TriggerData( + player = player, + location = player.location, + event = event, + value = event.amount + ) + ) + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerJoinJob.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerJoinJob.kt new file mode 100644 index 0000000..097e7fc --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerJoinJob.kt @@ -0,0 +1,32 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.ecojobs.api.event.PlayerJobJoinEvent +import com.willfp.ecojobs.api.getJobLevel +import com.willfp.libreforge.triggers.Trigger +import com.willfp.libreforge.triggers.TriggerData +import com.willfp.libreforge.triggers.TriggerParameter +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler + +object TriggerJoinJob : Trigger("join_job") { + override val parameters = setOf( + TriggerParameter.PLAYER, + TriggerParameter.LOCATION, + TriggerParameter.EVENT + ) + + @EventHandler(ignoreCancelled = true) + fun handle(event: PlayerJobJoinEvent) { + val player = event.player as? Player ?: return + + this.dispatch( + player, + TriggerData( + player = player, + location = player.location, + event = event, + value = player.getJobLevel(event.job).toDouble() + ) + ) + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLeaveJob.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLeaveJob.kt new file mode 100644 index 0000000..32ec598 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLeaveJob.kt @@ -0,0 +1,30 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.ecojobs.api.event.PlayerJobLeaveEvent +import com.willfp.ecojobs.api.getJobLevel +import com.willfp.libreforge.triggers.Trigger +import com.willfp.libreforge.triggers.TriggerData +import com.willfp.libreforge.triggers.TriggerParameter +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler + +object TriggerLeaveJob : Trigger("leave_job") { + override val parameters = setOf( + TriggerParameter.PLAYER, + TriggerParameter.LOCATION, + ) + + @EventHandler(ignoreCancelled = true) + fun handle(event: PlayerJobLeaveEvent) { + val player = event.player as? Player ?: return + + this.dispatch( + player, + TriggerData( + player = player, + location = player.location, + value = player.getJobLevel(event.job).toDouble() + ) + ) + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLevelUpJob.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLevelUpJob.kt new file mode 100644 index 0000000..4627afe --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/libreforge/TriggerLevelUpJob.kt @@ -0,0 +1,30 @@ +package com.willfp.ecojobs.libreforge + +import com.willfp.ecojobs.api.event.PlayerJobLevelUpEvent +import com.willfp.libreforge.triggers.Trigger +import com.willfp.libreforge.triggers.TriggerData +import com.willfp.libreforge.triggers.TriggerParameter +import org.bukkit.event.EventHandler + +object TriggerLevelUpJob : Trigger("level_up_job") { + override val parameters = setOf( + TriggerParameter.PLAYER, + TriggerParameter.LOCATION, + TriggerParameter.EVENT + ) + + @EventHandler(ignoreCancelled = true) + fun handle(event: PlayerJobLevelUpEvent) { + val player = event.player + + this.dispatch( + player, + TriggerData( + player = player, + location = player.location, + event = event, + value = event.level.toDouble() + ) + ) + } +} diff --git a/gradle.properties b/gradle.properties index a0e1596..b02d2d8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ #libreforge-updater -#Tue Mar 28 16:06:44 BST 2023 +#Tue Mar 28 18:28:20 BST 2023 kotlin.code.style=official libreforge-version=4.0.0 version=3.0.0