diff --git a/eco-api/src/main/java/com/willfp/eco/core/gui/slot/SlotBuilder.java b/eco-api/src/main/java/com/willfp/eco/core/gui/slot/SlotBuilder.java index 0646fd2b..caed0b72 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/gui/slot/SlotBuilder.java +++ b/eco-api/src/main/java/com/willfp/eco/core/gui/slot/SlotBuilder.java @@ -2,6 +2,7 @@ package com.willfp.eco.core.gui.slot; import com.willfp.eco.core.gui.slot.functional.SlotHandler; import com.willfp.eco.core.gui.slot.functional.SlotModifier; +import com.willfp.eco.core.gui.slot.functional.SlotUpdater; import org.bukkit.event.inventory.InventoryClickEvent; import org.jetbrains.annotations.NotNull; @@ -106,8 +107,23 @@ public interface SlotBuilder { * * @param modifier The modifier. * @return The builder. + * @deprecated Use {@link SlotBuilder#setUpdater(SlotUpdater)} instead. */ - SlotBuilder setModifier(@NotNull SlotModifier modifier); + @Deprecated + default SlotBuilder setModifier(@NotNull SlotModifier modifier) { + return setUpdater((player, menu, previous) -> { + modifier.modify(player, menu, previous); + return previous; + }); + } + + /** + * Set the ItemStack updater. + * + * @param updater The updater. + * @return The builder. + */ + SlotBuilder setUpdater(@NotNull SlotUpdater updater); /** * Set slot to be a captive slot. diff --git a/eco-api/src/main/java/com/willfp/eco/core/gui/slot/functional/SlotModifier.java b/eco-api/src/main/java/com/willfp/eco/core/gui/slot/functional/SlotModifier.java index f9a2bbe6..3b3df359 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/gui/slot/functional/SlotModifier.java +++ b/eco-api/src/main/java/com/willfp/eco/core/gui/slot/functional/SlotModifier.java @@ -7,8 +7,11 @@ import org.jetbrains.annotations.NotNull; /** * Interface to run on slot modify. + * + * @deprecated Use {@link SlotUpdater} instead. */ @FunctionalInterface +@Deprecated public interface SlotModifier { /** * Performs this operation on the given arguments. diff --git a/eco-api/src/main/java/com/willfp/eco/core/gui/slot/functional/SlotUpdater.java b/eco-api/src/main/java/com/willfp/eco/core/gui/slot/functional/SlotUpdater.java new file mode 100644 index 00000000..83c51ba3 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/gui/slot/functional/SlotUpdater.java @@ -0,0 +1,24 @@ +package com.willfp.eco.core.gui.slot.functional; + +import com.willfp.eco.core.gui.menu.Menu; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +/** + * Interface to run on slot update. + */ +@FunctionalInterface +public interface SlotUpdater { + /** + * Performs this operation on the given arguments. + * + * @param player The player. + * @param menu The menu. + * @param previous The previous ItemStack. + * @return The new ItemStack. + */ + ItemStack update(@NotNull Player player, + @NotNull Menu menu, + @NotNull ItemStack previous); +} diff --git a/eco-api/src/main/kotlin/com/willfp/eco/core/gui/GUIHelpers.kt b/eco-api/src/main/kotlin/com/willfp/eco/core/gui/GUIHelpers.kt index 57d7da19..cdcf92f9 100644 --- a/eco-api/src/main/kotlin/com/willfp/eco/core/gui/GUIHelpers.kt +++ b/eco-api/src/main/kotlin/com/willfp/eco/core/gui/GUIHelpers.kt @@ -43,10 +43,18 @@ fun SlotBuilder.onMiddleClick(action: (InventoryClickEvent, Slot, Menu) -> Unit) /** * @see SlotBuilder.setModifier + * @deprecated Use SlotUpdater instead. */ +@Deprecated("Use SlotUpdater instead") fun SlotBuilder.setModifier(action: (Player, Menu, ItemStack) -> Unit): SlotBuilder = this.setModifier { a, b, c -> action(a, b, c) } +/** + * @see SlotBuilder.setUpdater + */ +fun SlotBuilder.setUpdater(action: (Player, Menu, ItemStack) -> ItemStack): SlotBuilder = + this.setUpdater { a, b, c -> action(a, b, c) } + /** * Kotlin builder for slots. */ diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoCaptiveSlot.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoCaptiveSlot.kt index ba776540..cb9ada47 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoCaptiveSlot.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoCaptiveSlot.kt @@ -12,7 +12,7 @@ class EcoCaptiveSlot( allowMovingItem, allowMovingItem, allowMovingItem, - { _, _, _ -> } + { _, _, prev -> prev } ) { override fun isCaptive(): Boolean { return true diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoFillerSlot.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoFillerSlot.kt index b43764fb..307ab85c 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoFillerSlot.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoFillerSlot.kt @@ -9,5 +9,5 @@ class EcoFillerSlot(itemStack: ItemStack) : EcoSlot( { _, _, _ -> }, { _, _, _ -> }, { _, _, _ -> }, - { _, _, _ -> } + { _, _, prev -> prev } ) \ No newline at end of file diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlot.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlot.kt index fd2a005f..27fefd90 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlot.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlot.kt @@ -3,8 +3,8 @@ package com.willfp.eco.internal.gui.slot import com.willfp.eco.core.gui.menu.Menu import com.willfp.eco.core.gui.slot.Slot import com.willfp.eco.core.gui.slot.functional.SlotHandler -import com.willfp.eco.core.gui.slot.functional.SlotModifier import com.willfp.eco.core.gui.slot.functional.SlotProvider +import com.willfp.eco.core.gui.slot.functional.SlotUpdater import com.willfp.eco.internal.gui.menu.MenuHandler import org.bukkit.entity.Player import org.bukkit.event.inventory.ClickType @@ -18,7 +18,7 @@ open class EcoSlot( private val onShiftLeftClick: SlotHandler, private val onShiftRightClick: SlotHandler, private val onMiddleClick: SlotHandler, - private val modifier: SlotModifier + private val updater: SlotUpdater ) : Slot { fun handleInventoryClick( @@ -38,8 +38,7 @@ open class EcoSlot( override fun getItemStack(player: Player): ItemStack { val menu = MenuHandler.getMenu(player.openInventory.topInventory)!! val prev = provider.provide(player, menu) - modifier.modify(player, menu, prev) - return prev + return updater.update(player, menu, prev) } fun getItemStack( @@ -47,8 +46,7 @@ open class EcoSlot( menu: Menu ): ItemStack { val prev = provider.provide(player, menu) - modifier.modify(player, menu, prev) - return prev + return updater.update(player, menu, prev) } override fun isCaptive(): Boolean { diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlotBuilder.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlotBuilder.kt index 43707cf4..d4f7da97 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlotBuilder.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/slot/EcoSlotBuilder.kt @@ -3,12 +3,12 @@ package com.willfp.eco.internal.gui.slot import com.willfp.eco.core.gui.slot.Slot import com.willfp.eco.core.gui.slot.SlotBuilder import com.willfp.eco.core.gui.slot.functional.SlotHandler -import com.willfp.eco.core.gui.slot.functional.SlotModifier import com.willfp.eco.core.gui.slot.functional.SlotProvider +import com.willfp.eco.core.gui.slot.functional.SlotUpdater class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder { private var captive = false - private var modifier: SlotModifier = SlotModifier { player, menu, _ -> provider.provide(player, menu) } + private var updater: SlotUpdater = SlotUpdater { player, menu, _ -> provider.provide(player, menu) } private var onLeftClick = SlotHandler { _, _, _ -> run { } } @@ -51,8 +51,8 @@ class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder { return this } - override fun setModifier(modifier: SlotModifier): SlotBuilder { - this.modifier = modifier + override fun setUpdater(updater: SlotUpdater): SlotBuilder { + this.updater = updater return this } @@ -60,7 +60,7 @@ class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder { return if (captive) { EcoCaptiveSlot(provider) } else { - EcoSlot(provider, onLeftClick, onRightClick, onShiftLeftClick, onShiftRightClick, onMiddleClick, modifier) + EcoSlot(provider, onLeftClick, onRightClick, onShiftLeftClick, onShiftRightClick, onMiddleClick, updater) } } } \ No newline at end of file