3--! \brief Plugins
module for FrameworkZ. Extends the framework with modular plugins.
4--! \class FrameworkZ.Plugins
6FrameworkZ.Plugins.__index = FrameworkZ.Plugins
7FrameworkZ.Plugins.RegisteredPlugins = {}
8FrameworkZ.Plugins.Commands = {}
9FrameworkZ.Plugins.LoadedPlugins = {}
10FrameworkZ.Plugins.EventHandlers = {}
11FrameworkZ.Plugins = FrameworkZ.Foundation:NewModule(FrameworkZ.Plugins, "Plugins")
13-- Define the base plugin metatable
14FrameworkZ.Plugins.BasePlugin = {}
15FrameworkZ.Plugins.BasePlugin.__index = FrameworkZ.Plugins.BasePlugin
17-- Function to initialize a new plugin
18function FrameworkZ.Plugins:CreatePlugin(name)
19 local plugin = setmetatable({}, self.BasePlugin)
23 Description = "No description set.",
31--! \brief Register a plugin.
32--! \param pluginName \string The name of the plugin.
33--! \param pluginTable \table The table containing the plugin's functions and data.
34--! \param metadata \table Optional metadata for the plugin.
35function FrameworkZ.Plugins:RegisterPlugin(plugin)
36 if not self.RegisteredPlugins[plugin.Meta.Name] then
37 self.RegisteredPlugins[plugin.Meta.Name] = plugin
39 for k, v in pairs(plugin) do
40 self.RegisteredPlugins[plugin.Meta.Name].plugin[k] = v
44 FrameworkZ.Foundation:RegisterPluginHandler(plugin)
47function FrameworkZ.Plugins:GetPlugin(pluginName)
48 return self.RegisteredPlugins[pluginName]
51--! \brief Load a registered plugin.
52--! \param pluginName \string The name of the plugin to load.
53function FrameworkZ.Plugins:LoadPlugin(pluginName)
54 local plugin = self.RegisteredPlugins[pluginName]
55 if plugin and not self.LoadedPlugins[pluginName] then
56 if plugin.Initialize then
60 self.LoadedPlugins[pluginName] = plugin
61 self:RegisterPluginEventHandlers(plugin)
65--! \brief Unload a loaded plugin.
66--! \param pluginName \string The name of the plugin to unload.
67function FrameworkZ.Plugins:UnloadPlugin(pluginName)
68 local plugin = self.LoadedPlugins[pluginName]
70 self:UnregisterPluginEventHandlers(plugin)
72 if plugin.Cleanup then
76 self.LoadedPlugins[pluginName] = nil
80--! \brief Register event handlers for a plugin.
81--! \param plugin \table The plugin table containing the functions.
82function FrameworkZ.Plugins:RegisterPluginEventHandlers(plugin)
83 for _, eventName in ipairs(self.EventHandlers) do
84 if plugin[eventName] then
85 FrameworkZ.Hooks:RegisterHandler(eventName, plugin[eventName], plugin, eventName)
90--! \brief Unregister event handlers for a plugin.
91--! \param plugin \table The plugin table containing the functions.
92function FrameworkZ.Plugins:UnregisterPluginEventHandlers(plugin)
93 for _, eventName in ipairs(self.EventHandlers) do
94 if plugin[eventName] then
95 FrameworkZ.Hooks:UnregisterHandler(eventName, plugin[eventName], plugin, eventName)
100--! \brief Add a new event handler to the list.
101--! \param eventName \string The name of the event handler to add.
102function FrameworkZ.Plugins:AddEventHandler(eventName)
103 table.insert(self.EventHandlers, eventName)
106--! \brief Remove an event handler from the list.
107--! \param eventName \string The name of the event handler to remove.
108function FrameworkZ.Plugins:RemoveEventHandler(eventName)
109 for i, handler in ipairs(self.EventHandlers) do
110 if handler == eventName then
111 table.remove(self.EventHandlers, i)
117--! \brief Unregister a specific hook for a plugin.
118--! \param pluginName \string The name of the plugin.
119--! \param hookName \string The name of the hook to unregister.
120function FrameworkZ.Plugins:UnregisterPluginHook(pluginName, hookName)
121 local plugin = self.LoadedPlugins[pluginName]
122 if plugin and plugin[hookName] then
123 FrameworkZ.Hooks:UnregisterHandler(hookName, plugin[hookName], plugin, hookName)
124 plugin[hookName] = nil
128--! \brief Execute a hook for all loaded plugins.
129--! \param hookName \string The name of the hook to execute.
130--! \param ... \vararg Additional arguments to pass to the hook functions.
131function FrameworkZ.Plugins:ExecutePluginHook(hookName, ...)
132 for pluginName, plugin in pairs(self.LoadedPlugins) do
133 if plugin[hookName] then
134 local handlers = FrameworkZ.Hooks.RegisteredHooks[hookName]
137 for _, handler in ipairs(handlers) do
138 if handler.object and handler.functionName then
141 plugin[hookName](...)
149--! \brief Log a message for debugging purposes.
150--! \param message \string The message to log.
151function FrameworkZ.Plugins:Log(message)
152 print("[FrameworkZ.Plugins] " .. message)
155--! \brief Register a custom command for a plugin.
156--! \param commandName \string The name of the command.
157--! \param callback \function The function to call when the command is executed.
158function FrameworkZ.Plugins:RegisterCommand(commandName, callback)
159 if not self.Commands then
162 self.Commands[commandName] = callback
165--! \brief Execute a custom command.
166--! \param commandName \string The name of the command.
167--! \param ... \vararg Additional arguments to pass to the command function.
168function FrameworkZ.Plugins:ExecuteCommand(commandName, ...)
169 local command = self.Commands and self.Commands[commandName]
173 print("Command not found:", commandName)
177function FrameworkZ.Plugins.EveryOneMinute()
178 FrameworkZ.Plugins:ExecutePluginHook("EveryOneMinute")
180Events.EveryOneMinute.Add(FrameworkZ.Plugins.EveryOneMinute)
181FrameworkZ.Plugins:AddEventHandler("EveryOneMinute")
183function FrameworkZ.Plugins.EveryTenMinutes()
184 FrameworkZ.Plugins:ExecutePluginHook("EveryTenMinutes")
186Events.EveryTenMinutes.Add(FrameworkZ.Plugins.EveryTenMinutes)
187FrameworkZ.Plugins:AddEventHandler("EveryTenMinutes")
189function FrameworkZ.Plugins.EveryHours()
190 FrameworkZ.Plugins:ExecutePluginHook("EveryHours")
192Events.EveryHours.Add(FrameworkZ.Plugins.EveryHours)
193FrameworkZ.Plugins:AddEventHandler("EveryHours")
195function FrameworkZ.Plugins.EveryDays()
196 FrameworkZ.Plugins:ExecutePluginHook("EveryDays")
198Events.EveryDays.Add(FrameworkZ.Plugins.EveryDays)
199FrameworkZ.Plugins:AddEventHandler("EveryDays")
201function FrameworkZ.Plugins.OnAcceptedTrade(accepted)
202 FrameworkZ.Plugins:ExecutePluginHook("OnAcceptedTrade", accepted)
204Events.AcceptedTrade.Add(FrameworkZ.Plugins.OnAcceptedTrade)
205FrameworkZ.Plugins:AddEventHandler("OnAcceptedTrade")
207function FrameworkZ.Plugins.LoadGridsquare(square)
208 FrameworkZ.Plugins:ExecutePluginHook("OnLoadGridsquare", square)
210Events.LoadGridsquare.Add(FrameworkZ.Plugins.LoadGridsquare)
211FrameworkZ.Plugins:AddEventHandler("OnLoadGridsquare")
213function FrameworkZ.Plugins.OnPlayerDeath(player)
214 FrameworkZ.Plugins:ExecutePluginHook("OnPlayerDeath", player)
216Events.OnPlayerDeath.Add(FrameworkZ.Plugins.OnPlayerDeath)
217FrameworkZ.Plugins:AddEventHandler("OnPlayerDeath")
219function FrameworkZ.Plugins.OnRequestTrade(player)
220 FrameworkZ.Plugins:ExecutePluginHook("OnRequestTrade", player)
222Events.RequestTrade.Add(FrameworkZ.Plugins.OnRequestTrade)
223FrameworkZ.Plugins:AddEventHandler("OnRequestTrade")
Plugins module for FrameworkZ. Extends the framework with modular plugins.
FrameworkZ Plugins RegisteredPlugins
void UnregisterPluginEventHandlers(plugin)
Unregister event handlers for a plugin.
void AddEventHandler(eventName)
Add a new event handler to the list.
void OnRequestTrade(player)
void RemoveEventHandler(eventName)
Remove an event handler from the list.
FrameworkZ Plugins __index
void UnloadPlugin(pluginName)
Unload a loaded plugin.
void RegisterCommand(commandName, callback)
Register a custom command for a plugin.
FrameworkZ Plugins BasePlugin
void Log(message)
Log a message for debugging purposes.
void ExecuteCommand(commandName,...)
Execute a custom command.
void ExecutePluginHook(hookName,...)
Execute a hook for all loaded plugins.
void GetPlugin(pluginName)
FrameworkZ Plugins EventHandlers
void OnAcceptedTrade(accepted)
void UnregisterPluginHook(pluginName, hookName)
Unregister a specific hook for a plugin.
void OnPlayerDeath(player)
void LoadPlugin(pluginName)
Load a registered plugin.
void RegisterPluginEventHandlers(plugin)
Register event handlers for a plugin.
FrameworkZ Plugins LoadedPlugins
void LoadGridsquare(square)
void RegisterPlugin(plugin)
Register a plugin.
FrameworkZ Plugins Commands