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.eco.core.command.impl.PluginCommand
|
||||||
import com.willfp.ecomenus.commands.CommandEcoMenus
|
import com.willfp.ecomenus.commands.CommandEcoMenus
|
||||||
|
import com.willfp.ecomenus.libreforge.EffectOpenMenu
|
||||||
import com.willfp.ecomenus.menus.EcoMenus
|
import com.willfp.ecomenus.menus.EcoMenus
|
||||||
|
import com.willfp.libreforge.effects.Effects
|
||||||
import com.willfp.libreforge.loader.LibreforgePlugin
|
import com.willfp.libreforge.loader.LibreforgePlugin
|
||||||
import com.willfp.libreforge.loader.configs.ConfigCategory
|
import com.willfp.libreforge.loader.configs.ConfigCategory
|
||||||
|
import net.kyori.adventure.text.logger.slf4j.ComponentLogger
|
||||||
|
|
||||||
class EcoMenusPlugin : LibreforgePlugin() {
|
class EcoMenusPlugin : LibreforgePlugin() {
|
||||||
|
override fun handleEnable() {
|
||||||
|
Effects.register(EffectOpenMenu)
|
||||||
|
}
|
||||||
|
|
||||||
override fun loadPluginCommands(): List<PluginCommand> {
|
override fun loadPluginCommands(): List<PluginCommand> {
|
||||||
return listOf(
|
return listOf(
|
||||||
CommandEcoMenus(this)
|
CommandEcoMenus(this)
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.willfp.ecomenus.components
|
package com.willfp.ecomenus.components
|
||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
|
||||||
import com.willfp.eco.core.config.interfaces.Config
|
import com.willfp.eco.core.config.interfaces.Config
|
||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.eco.core.gui.menu.Menu
|
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.context.placeholderContext
|
||||||
import com.willfp.eco.core.placeholder.findPlaceholders
|
import com.willfp.eco.core.placeholder.findPlaceholders
|
||||||
import com.willfp.eco.core.placeholder.translatePlaceholders
|
import com.willfp.eco.core.placeholder.translatePlaceholders
|
||||||
import com.willfp.ecomenus.slots.SlotTypes
|
|
||||||
import com.willfp.libreforge.ConfigViolation
|
import com.willfp.libreforge.ConfigViolation
|
||||||
import com.willfp.libreforge.EmptyProvidedHolder
|
import com.willfp.libreforge.EmptyProvidedHolder
|
||||||
import com.willfp.libreforge.ViolationContext
|
import com.willfp.libreforge.ViolationContext
|
||||||
import com.willfp.libreforge.conditions.Conditions
|
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.entity.Player
|
||||||
import org.bukkit.event.inventory.ClickType
|
import org.bukkit.event.inventory.ClickType
|
||||||
|
|
||||||
class ConfigurableSlot(
|
class ConfigurableSlot(
|
||||||
private val plugin: EcoPlugin,
|
|
||||||
baseContext: ViolationContext,
|
baseContext: ViolationContext,
|
||||||
private val config: Config
|
private val config: Config
|
||||||
) : PositionedComponent {
|
) : PositionedComponent {
|
||||||
@@ -74,19 +73,17 @@ class ConfigurableSlot(
|
|||||||
}) {
|
}) {
|
||||||
for (clickType in ClickType.values()) {
|
for (clickType in ClickType.values()) {
|
||||||
val section = "${clickType.name.lowercase().replace("_", "-")}-click"
|
val section = "${clickType.name.lowercase().replace("_", "-")}-click"
|
||||||
val actions = config.getSubsections(section)
|
|
||||||
|
|
||||||
for (action in actions) {
|
val effects = Effects.compileChain(
|
||||||
val typeName = action.getString("type")
|
config.getSubsections(section),
|
||||||
val type = SlotTypes[typeName] ?: continue
|
NormalExecutorFactory.create(),
|
||||||
|
context.with(section)
|
||||||
|
) ?: continue
|
||||||
|
|
||||||
val function = type.create(
|
onClick(clickType) { player, _, _, _ ->
|
||||||
action,
|
if (conditions.areMet(player, EmptyProvidedHolder)) {
|
||||||
plugin,
|
effects.trigger(player)
|
||||||
context.with(section).with(typeName)
|
}
|
||||||
)?.toSlotAction(conditions) ?: continue
|
|
||||||
|
|
||||||
onClick(clickType, function)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")) {
|
for (slotConfig in config.getSubsections("slots")) {
|
||||||
val slot = ConfigurableSlot(
|
val slot = ConfigurableSlot(
|
||||||
plugin,
|
|
||||||
ViolationContext(plugin, "menu ${menu.id}"),
|
ViolationContext(plugin, "menu ${menu.id}"),
|
||||||
slotConfig
|
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
|
# If the item should be shown if the conditions are not met
|
||||||
show-if-not-met: false
|
show-if-not-met: false
|
||||||
|
|
||||||
|
# Read https://plugins.auxilor.io/effects/configuring-an-effect
|
||||||
|
# The effects ran when the item is clicked
|
||||||
left-click:
|
left-click:
|
||||||
- type: effects
|
- id: send_message
|
||||||
effects:
|
args:
|
||||||
- id: send_message
|
message: "&cYou clicked the close button!"
|
||||||
args:
|
|
||||||
message: "&cYou clicked the close button!"
|
|
||||||
|
|
||||||
- type: close
|
- id: close_inventory
|
||||||
commands: [ ]
|
|
||||||
|
|
||||||
- type: menu
|
|
||||||
menu: other_example_menu
|
|
||||||
|
|
||||||
- type: console_command
|
|
||||||
commands:
|
|
||||||
- "eco give %player% 100"
|
|
||||||
|
|
||||||
- item: player_head head:%player% name:"&f%player%"
|
- item: player_head head:%player% name:"&f%player%"
|
||||||
location:
|
location:
|
||||||
@@ -125,10 +117,11 @@ slots:
|
|||||||
column: 5
|
column: 5
|
||||||
page: 1
|
page: 1
|
||||||
|
|
||||||
left-click:
|
shift-right-click:
|
||||||
- type: menu
|
- id: open_menu
|
||||||
menu: other_example_menu
|
args:
|
||||||
|
menu: other_example_menu
|
||||||
|
|
||||||
- type: console_command
|
- id: run_command
|
||||||
commands:
|
args:
|
||||||
- "eco give %player% 100"
|
command: "eco give %player% 100"
|
||||||
|
|||||||
Reference in New Issue
Block a user