diff --git a/eco-api/src/main/java/com/willfp/eco/core/gui/menu/MenuBuilder.java b/eco-api/src/main/java/com/willfp/eco/core/gui/menu/MenuBuilder.java index b43dd472..a56628f0 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/gui/menu/MenuBuilder.java +++ b/eco-api/src/main/java/com/willfp/eco/core/gui/menu/MenuBuilder.java @@ -195,6 +195,16 @@ public interface MenuBuilder extends PageBuilder { return this; } + /** + * Add an action to run on build. + * + * @param action The action. + * @return The builder. + */ + default MenuBuilder onBuild(@NotNull Consumer action) { + return this; + } + /** * Build the menu. * diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenuBuilder.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenuBuilder.kt index 4cc41ae3..f4b51ed1 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenuBuilder.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenuBuilder.kt @@ -22,6 +22,7 @@ class EcoMenuBuilder( private val onOpen = mutableListOf() private val onRender = mutableListOf<(Player, Menu) -> Unit>() private val menuEventHandlers = mutableListOf>() + private val onBuild = mutableListOf<(Menu) -> Unit>() private var allowsChangingHeldItem = false override fun getRows() = rows @@ -80,6 +81,11 @@ class EcoMenuBuilder( return this } + override fun onBuild(action: Consumer): MenuBuilder { + onBuild += { action.accept(it) } + return this + } + override fun allowChangingHeldItem(): MenuBuilder { allowsChangingHeldItem = true return this @@ -122,7 +128,7 @@ class EcoMenuBuilder( } } - return EcoMenu( + val menu = EcoMenu( rows, columns, layeredComponents, @@ -133,5 +139,9 @@ class EcoMenuBuilder( menuEventHandlers, allowsChangingHeldItem ) + + onBuild.forEach { it(menu) } // Run on build functions. + + return menu } }