Added conditions to xp gain methods
This commit is contained in:
@@ -151,12 +151,15 @@ class Pet(
|
||||
private val petXpGains = config.getSubsections("xp-gain-methods").mapNotNull {
|
||||
val trigger = Triggers.getById(it.getString("id")) ?: return@mapNotNull null
|
||||
val multiplier = it.getDouble("multiplier")
|
||||
val conditions = it.getSubsections("conditions")
|
||||
.mapNotNull { cfg -> Conditions.compile(cfg, "Pet $id XP Gain methods") }
|
||||
|
||||
PetXPGain(
|
||||
trigger to PetXPGain(
|
||||
trigger,
|
||||
multiplier
|
||||
multiplier,
|
||||
conditions
|
||||
)
|
||||
}
|
||||
}.toMap()
|
||||
|
||||
init {
|
||||
config.injectPlaceholders(
|
||||
@@ -398,12 +401,8 @@ class Pet(
|
||||
}
|
||||
}
|
||||
|
||||
fun canGainXPFromTrigger(trigger: Trigger): Boolean {
|
||||
return petXpGains.any { it.trigger == trigger }
|
||||
}
|
||||
|
||||
fun getTriggerXPMultiplier(trigger: Trigger): Double {
|
||||
return petXpGains.firstOrNull { it.trigger == trigger }?.multiplier ?: 1.0
|
||||
fun getPetXPGain(trigger: Trigger): PetXPGain? {
|
||||
return petXpGains[trigger]
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.willfp.ecopets.pets
|
||||
|
||||
import com.willfp.libreforge.conditions.ConfiguredCondition
|
||||
import com.willfp.libreforge.events.TriggerPreProcessEvent
|
||||
import com.willfp.libreforge.triggers.Trigger
|
||||
import org.bukkit.event.EventHandler
|
||||
@@ -7,10 +8,11 @@ import org.bukkit.event.Listener
|
||||
|
||||
data class PetXPGain(
|
||||
val trigger: Trigger,
|
||||
val multiplier: Double
|
||||
val multiplier: Double,
|
||||
val conditions: Iterable<ConfiguredCondition>
|
||||
)
|
||||
|
||||
object PetTriggerXPGainListener: Listener {
|
||||
object PetTriggerXPGainListener : Listener {
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun handle(event: TriggerPreProcessEvent) {
|
||||
val player = event.player
|
||||
@@ -19,11 +21,15 @@ object PetTriggerXPGainListener: Listener {
|
||||
|
||||
val pet = event.player.activePet ?: return
|
||||
|
||||
if (pet.canGainXPFromTrigger(trigger)) {
|
||||
player.givePetExperience(
|
||||
pet,
|
||||
value * pet.getTriggerXPMultiplier(trigger)
|
||||
)
|
||||
val xpGain = pet.getPetXPGain(trigger) ?: return
|
||||
|
||||
if (xpGain.conditions.any { !it.isMet(player) }) {
|
||||
return
|
||||
}
|
||||
|
||||
player.givePetExperience(
|
||||
pet,
|
||||
value * xpGain.multiplier
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +65,7 @@ pets:
|
||||
xp-gain-methods:
|
||||
- id: melee_attack
|
||||
multiplier: 0.5
|
||||
conditions: [ ] # You can add a list of conditions that must be met on xp gain
|
||||
|
||||
# Custom placeholders to be used in descriptions,
|
||||
# Don't add % to the IDs, this is done automatically
|
||||
|
||||
Reference in New Issue
Block a user