diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandApply.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandApply.kt index f7a0ce3..2bc670d 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandApply.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandApply.kt @@ -28,6 +28,7 @@ class CommandApply( if (sender is Player) { val item = sender.inventory.itemInMainHand item.reforge = reforge + reforge.runOnReforgeEffects(sender, item) sender.sendMessage( plugin.langYml.getMessage("applied-reforge") .replace("%reforge%", reforge.name) @@ -45,7 +46,10 @@ class CommandApply( return } - player.inventory.itemInMainHand.reforge = reforge + val item = player.inventory.itemInMainHand + + item.reforge = reforge + reforge.runOnReforgeEffects(player, item) sender.sendMessage( plugin.langYml.getMessage("applied-reforge") .replace("%reforge%", reforge.name) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/gui/ReforgeGUI.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/gui/ReforgeGUI.kt index 2e3e276..f77f03e 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/gui/ReforgeGUI.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/gui/ReforgeGUI.kt @@ -150,6 +150,8 @@ private class ActivatorSlot( item.timesReforged++ item.reforge = reforge + reforge.runOnReforgeEffects(player, item) + if (usedStone) { val stone = reforgeStone[player] stone?.amount = stone?.amount?.minus(1) ?: 0 diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt index 93a5d85..8442958 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt @@ -11,12 +11,15 @@ import com.willfp.eco.core.recipe.Recipes import com.willfp.eco.core.registry.Registrable import com.willfp.eco.util.StringUtils import com.willfp.libreforge.Holder +import com.willfp.libreforge.ItemProvidedHolder import com.willfp.libreforge.ViolationContext import com.willfp.libreforge.conditions.Conditions import com.willfp.libreforge.effects.Effects +import com.willfp.libreforge.triggers.TriggerData import com.willfp.reforges.ReforgesPlugin import com.willfp.reforges.util.reforgeStone import net.kyori.adventure.text.format.TextDecoration +import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack import java.util.Objects @@ -73,6 +76,11 @@ class Reforge( } } else null + private val onReforgeEffects = Effects.compileChain( + config.getSubsections("on-reforge-effects"), + ViolationContext(plugin, "Reforge $id").with("on-reforge-effects") + ) + init { stone.reforgeStone = this @@ -98,6 +106,17 @@ class Reforge( return targets.any { target -> target.items.any { it.matches(item) } } } + fun runOnReforgeEffects(player: Player, item: ItemStack) { + onReforgeEffects?.trigger( + player, + TriggerData( + holder = ItemProvidedHolder(this, item), + player = player, + item = item + ) + ) + } + override fun getID(): String { return this.id.key } diff --git a/eco-core/core-plugin/src/main/resources/reforges/_example.yml b/eco-core/core-plugin/src/main/resources/reforges/_example.yml index 5911a66..830832d 100644 --- a/eco-core/core-plugin/src/main/resources/reforges/_example.yml +++ b/eco-core/core-plugin/src/main/resources/reforges/_example.yml @@ -54,3 +54,6 @@ effects: # The conditions required to use the reforge conditions: [ ] + +# Effects to run when the reforge is applied to an item. +on-reforge-effects: [ ]