From aa871b8776ce2e6e38192f731372d30f32c20136 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 10 Jul 2023 15:44:55 +0100 Subject: [PATCH] Removed SlotType to only be based around the effects system, updated _example.yml --- .../com/willfp/ecomenus/EcoMenusPlugin.kt | 7 ++++ .../ecomenus/components/ConfigurableSlot.kt | 25 ++++++------ .../ecomenus/libreforge/EffectOpenMenu.kt | 29 ++++++++++++++ .../kotlin/com/willfp/ecomenus/menus/Menu.kt | 1 - .../com/willfp/ecomenus/slots/SlotFunction.kt | 19 ---------- .../com/willfp/ecomenus/slots/SlotType.kt | 12 ------ .../com/willfp/ecomenus/slots/SlotTypes.kt | 18 --------- .../ecomenus/slots/impl/SlotTypeClose.kt | 28 -------------- .../ecomenus/slots/impl/SlotTypeCommand.kt | 37 ------------------ .../slots/impl/SlotTypeConsoleCommand.kt | 20 ---------- .../ecomenus/slots/impl/SlotTypeEffects.kt | 38 ------------------- .../ecomenus/slots/impl/SlotTypeMenu.kt | 27 ------------- .../src/main/resources/menus/_example.yml | 33 +++++++--------- 13 files changed, 60 insertions(+), 234 deletions(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/libreforge/EffectOpenMenu.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotFunction.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotType.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotTypes.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeClose.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeCommand.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeConsoleCommand.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeEffects.kt delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeMenu.kt diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/EcoMenusPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/EcoMenusPlugin.kt index 1c1fe96..b40a3a9 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/EcoMenusPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/EcoMenusPlugin.kt @@ -2,11 +2,18 @@ package com.willfp.ecomenus import com.willfp.eco.core.command.impl.PluginCommand import com.willfp.ecomenus.commands.CommandEcoMenus +import com.willfp.ecomenus.libreforge.EffectOpenMenu import com.willfp.ecomenus.menus.EcoMenus +import com.willfp.libreforge.effects.Effects import com.willfp.libreforge.loader.LibreforgePlugin import com.willfp.libreforge.loader.configs.ConfigCategory +import net.kyori.adventure.text.logger.slf4j.ComponentLogger class EcoMenusPlugin : LibreforgePlugin() { + override fun handleEnable() { + Effects.register(EffectOpenMenu) + } + override fun loadPluginCommands(): List { return listOf( CommandEcoMenus(this) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/components/ConfigurableSlot.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/components/ConfigurableSlot.kt index 10555b5..c0f41b8 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/components/ConfigurableSlot.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/components/ConfigurableSlot.kt @@ -1,6 +1,5 @@ package com.willfp.ecomenus.components -import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.config.interfaces.Config import com.willfp.eco.core.fast.fast import com.willfp.eco.core.gui.menu.Menu @@ -13,16 +12,16 @@ import com.willfp.eco.core.items.Items import com.willfp.eco.core.placeholder.context.placeholderContext import com.willfp.eco.core.placeholder.findPlaceholders import com.willfp.eco.core.placeholder.translatePlaceholders -import com.willfp.ecomenus.slots.SlotTypes import com.willfp.libreforge.ConfigViolation import com.willfp.libreforge.EmptyProvidedHolder import com.willfp.libreforge.ViolationContext import com.willfp.libreforge.conditions.Conditions +import com.willfp.libreforge.effects.Effects +import com.willfp.libreforge.effects.executors.impl.NormalExecutorFactory import org.bukkit.entity.Player import org.bukkit.event.inventory.ClickType class ConfigurableSlot( - private val plugin: EcoPlugin, baseContext: ViolationContext, private val config: Config ) : PositionedComponent { @@ -74,19 +73,17 @@ class ConfigurableSlot( }) { for (clickType in ClickType.values()) { val section = "${clickType.name.lowercase().replace("_", "-")}-click" - val actions = config.getSubsections(section) - for (action in actions) { - val typeName = action.getString("type") - val type = SlotTypes[typeName] ?: continue + val effects = Effects.compileChain( + config.getSubsections(section), + NormalExecutorFactory.create(), + context.with(section) + ) ?: continue - val function = type.create( - action, - plugin, - context.with(section).with(typeName) - )?.toSlotAction(conditions) ?: continue - - onClick(clickType, function) + onClick(clickType) { player, _, _, _ -> + if (conditions.areMet(player, EmptyProvidedHolder)) { + effects.trigger(player) + } } } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/libreforge/EffectOpenMenu.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/libreforge/EffectOpenMenu.kt new file mode 100644 index 0000000..617ded0 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/libreforge/EffectOpenMenu.kt @@ -0,0 +1,29 @@ +package com.willfp.ecomenus.libreforge + +import com.willfp.eco.core.config.interfaces.Config +import com.willfp.eco.util.openMenu +import com.willfp.ecomenus.menus.EcoMenus +import com.willfp.libreforge.NoCompileData +import com.willfp.libreforge.arguments +import com.willfp.libreforge.effects.Effect +import com.willfp.libreforge.triggers.TriggerData +import com.willfp.libreforge.triggers.TriggerParameter + +object EffectOpenMenu : Effect("open_menu") { + override val parameters = setOf( + TriggerParameter.PLAYER + ) + + override val arguments = arguments { + require("menu", "You must specify the menu ID!") + } + + override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean { + val player = data.player ?: return false + + val menu = EcoMenus[config.getString("menu")] ?: return false + menu.forceOpen(player, player.openMenu) + + return true + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/menus/Menu.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/menus/Menu.kt index 5fdc9c5..a22504e 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/menus/Menu.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/menus/Menu.kt @@ -41,7 +41,6 @@ fun buildMenu(plugin: EcoPlugin, menu: EcoMenu, config: Config): Menu { for (slotConfig in config.getSubsections("slots")) { val slot = ConfigurableSlot( - plugin, ViolationContext(plugin, "menu ${menu.id}"), slotConfig ) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotFunction.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotFunction.kt deleted file mode 100644 index 345e2f7..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotFunction.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.willfp.ecomenus.slots - -import com.willfp.eco.core.gui.menu.Menu -import com.willfp.eco.core.gui.slot.Slot -import com.willfp.ecomponent.SlotAction -import com.willfp.libreforge.EmptyProvidedHolder -import com.willfp.libreforge.conditions.ConditionList -import org.bukkit.entity.Player -import org.bukkit.event.inventory.InventoryClickEvent - -interface SlotFunction { - fun execute(player: Player, event: InventoryClickEvent, slot: Slot, menu: Menu) - - fun toSlotAction(conditions: ConditionList): SlotAction = { player, event, slot, menu -> - if (conditions.areMet(player, EmptyProvidedHolder)) { - this.execute(player, event, slot, menu) - } - } -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotType.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotType.kt deleted file mode 100644 index 4954820..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotType.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.willfp.ecomenus.slots - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.core.gui.slot.SlotBuilder -import com.willfp.eco.core.registry.KRegistrable -import com.willfp.ecomponent.SlotAction -import com.willfp.libreforge.ViolationContext - -abstract class SlotType(override val id: String) : KRegistrable { - abstract fun create(config: Config, plugin: EcoPlugin, context: ViolationContext): SlotFunction? -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotTypes.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotTypes.kt deleted file mode 100644 index a8d6cc2..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/SlotTypes.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.willfp.ecomenus.slots - -import com.willfp.eco.core.registry.Registry -import com.willfp.ecomenus.slots.impl.SlotTypeClose -import com.willfp.ecomenus.slots.impl.SlotTypeCommand -import com.willfp.ecomenus.slots.impl.SlotTypeConsoleCommand -import com.willfp.ecomenus.slots.impl.SlotTypeEffects -import com.willfp.ecomenus.slots.impl.SlotTypeMenu - -object SlotTypes : Registry() { - init { - register(SlotTypeCommand) - register(SlotTypeConsoleCommand) - register(SlotTypeMenu) - register(SlotTypeClose) - register(SlotTypeEffects) - } -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeClose.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeClose.kt deleted file mode 100644 index 29ea4ef..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeClose.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.ecomenus.slots.impl - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.core.gui.menu.Menu -import com.willfp.eco.core.gui.slot.Slot -import com.willfp.ecomenus.menus.EcoMenu -import com.willfp.ecomenus.menus.EcoMenus -import com.willfp.ecomenus.menus.close -import com.willfp.ecomenus.menus.open -import com.willfp.ecomenus.slots.SlotFunction -import com.willfp.ecomenus.slots.SlotType -import com.willfp.libreforge.ViolationContext -import org.bukkit.Bukkit -import org.bukkit.entity.Player -import org.bukkit.event.inventory.InventoryClickEvent - -object SlotTypeClose : SlotType("close") { - override fun create(config: Config, plugin: EcoPlugin, context: ViolationContext): SlotFunction { - return CloseSlotFunction - } - - private object CloseSlotFunction : SlotFunction { - override fun execute(player: Player, event: InventoryClickEvent, slot: Slot, menu: Menu) { - menu.close(player) - } - } -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeCommand.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeCommand.kt deleted file mode 100644 index ae85a43..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeCommand.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.willfp.ecomenus.slots.impl - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.core.gui.menu.Menu -import com.willfp.eco.core.gui.slot.Slot -import com.willfp.eco.core.placeholder.context.placeholderContext -import com.willfp.eco.core.placeholder.translatePlaceholders -import com.willfp.ecomenus.slots.SlotFunction -import com.willfp.ecomenus.slots.SlotType -import com.willfp.libreforge.ViolationContext -import org.bukkit.Bukkit -import org.bukkit.command.CommandSender -import org.bukkit.entity.Player -import org.bukkit.event.inventory.InventoryClickEvent - -object SlotTypeCommand : SlotType("command") { - override fun create(config: Config, plugin: EcoPlugin, context: ViolationContext): SlotFunction { - val commands = config.getStrings("commands") - - return CommandSlotFunction(commands) - } -} - -class CommandSlotFunction( - private val commands: List, - private val sender: CommandSender? = null -) : SlotFunction { - override fun execute(player: Player, event: InventoryClickEvent, slot: Slot, menu: Menu) { - for (command in commands) { - Bukkit.dispatchCommand( - sender ?: player, - command.translatePlaceholders(placeholderContext(player = player)) - ) - } - } -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeConsoleCommand.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeConsoleCommand.kt deleted file mode 100644 index 2e50786..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeConsoleCommand.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.willfp.ecomenus.slots.impl - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.core.gui.menu.Menu -import com.willfp.eco.core.gui.slot.Slot -import com.willfp.ecomenus.slots.SlotFunction -import com.willfp.ecomenus.slots.SlotType -import com.willfp.libreforge.ViolationContext -import org.bukkit.Bukkit -import org.bukkit.entity.Player -import org.bukkit.event.inventory.InventoryClickEvent - -object SlotTypeConsoleCommand : SlotType("console_command") { - override fun create(config: Config, plugin: EcoPlugin, context: ViolationContext): SlotFunction { - val commands = config.getStrings("commands") - - return CommandSlotFunction(commands, Bukkit.getConsoleSender()) - } -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeEffects.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeEffects.kt deleted file mode 100644 index 28d2ebb..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeEffects.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.willfp.ecomenus.slots.impl - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.core.gui.menu.Menu -import com.willfp.eco.core.gui.slot.Slot -import com.willfp.ecomenus.slots.SlotFunction -import com.willfp.ecomenus.slots.SlotType -import com.willfp.libreforge.ViolationContext -import com.willfp.libreforge.effects.Chain -import com.willfp.libreforge.effects.Effects -import com.willfp.libreforge.effects.executors.ChainExecutors -import com.willfp.libreforge.triggers.DispatchedTrigger -import com.willfp.libreforge.triggers.Trigger -import com.willfp.libreforge.triggers.TriggerData -import com.willfp.libreforge.triggers.TriggerParameter -import org.bukkit.entity.Player -import org.bukkit.event.inventory.InventoryClickEvent - -object SlotTypeEffects : SlotType("effects") { - override fun create(config: Config, plugin: EcoPlugin, context: ViolationContext): SlotFunction? { - val chain = Effects.compileChain( - config.getSubsections("effects"), - ChainExecutors.getByID(config.getString("run-type")), - context - ) ?: return null - - return SlotFunctionEffects(chain) - } - - private class SlotFunctionEffects( - private val chain: Chain - ) : SlotFunction { - override fun execute(player: Player, event: InventoryClickEvent, slot: Slot, menu: Menu) { - chain.trigger(player) - } - } -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeMenu.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeMenu.kt deleted file mode 100644 index a7f22e2..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomenus/slots/impl/SlotTypeMenu.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.willfp.ecomenus.slots.impl - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.core.gui.menu.Menu -import com.willfp.eco.core.gui.slot.Slot -import com.willfp.ecomenus.menus.EcoMenu -import com.willfp.ecomenus.menus.EcoMenus -import com.willfp.ecomenus.menus.open -import com.willfp.ecomenus.slots.SlotFunction -import com.willfp.ecomenus.slots.SlotType -import com.willfp.libreforge.ViolationContext -import org.bukkit.Bukkit -import org.bukkit.entity.Player -import org.bukkit.event.inventory.InventoryClickEvent - -object SlotTypeMenu : SlotType("menu") { - override fun create(config: Config, plugin: EcoPlugin, context: ViolationContext): SlotFunction? { - val ecoMenu = EcoMenus[config.getString("menu")] ?: return null - - return object : SlotFunction { - override fun execute(player: Player, event: InventoryClickEvent, slot: Slot, menu: Menu) { - ecoMenu.open(player, menu) - } - } - } -} diff --git a/eco-core/core-plugin/src/main/resources/menus/_example.yml b/eco-core/core-plugin/src/main/resources/menus/_example.yml index 8c714cf..88b348d 100644 --- a/eco-core/core-plugin/src/main/resources/menus/_example.yml +++ b/eco-core/core-plugin/src/main/resources/menus/_example.yml @@ -102,22 +102,14 @@ slots: # If the item should be shown if the conditions are not met show-if-not-met: false + # Read https://plugins.auxilor.io/effects/configuring-an-effect + # The effects ran when the item is clicked left-click: - - type: effects - effects: - - id: send_message - args: - message: "&cYou clicked the close button!" + - id: send_message + args: + message: "&cYou clicked the close button!" - - type: close - commands: [ ] - - - type: menu - menu: other_example_menu - - - type: console_command - commands: - - "eco give %player% 100" + - id: close_inventory - item: player_head head:%player% name:"&f%player%" location: @@ -125,10 +117,11 @@ slots: column: 5 page: 1 - left-click: - - type: menu - menu: other_example_menu + shift-right-click: + - id: open_menu + args: + menu: other_example_menu - - type: console_command - commands: - - "eco give %player% 100" + - id: run_command + args: + command: "eco give %player% 100"