Added conditions to xp gain methods

This commit is contained in:
Auxilor
2022-06-18 14:55:46 +01:00
parent be4c70e0c5
commit 77f08961b8
3 changed files with 22 additions and 16 deletions

View File

@@ -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 {

View File

@@ -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
)
}
}

View File

@@ -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