mirror of
https://github.com/Auxilor/EcoMenus.git
synced 2025-12-19 15:09:20 +00:00
Removed SlotType to only be based around the effects system, updated _example.yml
This commit is contained in:
@@ -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<PluginCommand> {
|
||||
return listOf(
|
||||
CommandEcoMenus(this)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<NoCompileData>("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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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?
|
||||
}
|
||||
@@ -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<SlotType>() {
|
||||
init {
|
||||
register(SlotTypeCommand)
|
||||
register(SlotTypeConsoleCommand)
|
||||
register(SlotTypeMenu)
|
||||
register(SlotTypeClose)
|
||||
register(SlotTypeEffects)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String>,
|
||||
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))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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!"
|
||||
|
||||
- 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
|
||||
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"
|
||||
|
||||
Reference in New Issue
Block a user