FrameworkZ 4.4.2
Provides a framework for Project Zomboid with various systems.
Loading...
Searching...
No Matches
Plugins.lua
Go to the documentation of this file.
1local Events = Events
2
3--! \brief Plugins module for FrameworkZ. Extends the framework with modular plugins.
4--! \class FrameworkZ.Plugins
5FrameworkZ.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")
12
13-- Define the base plugin metatable
14FrameworkZ.Plugins.BasePlugin = {}
15FrameworkZ.Plugins.BasePlugin.__index = FrameworkZ.Plugins.BasePlugin
16
17-- Function to initialize a new plugin
18function FrameworkZ.Plugins:CreatePlugin(name)
19 local plugin = setmetatable({}, self.BasePlugin)
20 plugin.Meta = {
21 Author = "N/A",
22 Name = name,
23 Description = "No description set.",
24 Version = "1.0.0",
25 Compatibility = ""
26 }
27
28 return plugin
29end
30
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
38 else
39 for k, v in pairs(plugin) do
40 self.RegisteredPlugins[plugin.Meta.Name].plugin[k] = v
41 end
42 end
44 FrameworkZ.Foundation:RegisterPluginHandler(plugin)
45end
46
47function FrameworkZ.Plugins:GetPlugin(pluginName)
48 return self.RegisteredPlugins[pluginName]
49end
50
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
57 plugin:Initialize()
58 end
59
60 self.LoadedPlugins[pluginName] = plugin
61 self:RegisterPluginEventHandlers(plugin)
62 end
63end
64
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]
69 if plugin then
70 self:UnregisterPluginEventHandlers(plugin)
71
72 if plugin.Cleanup then
73 plugin:Cleanup()
74 end
75
76 self.LoadedPlugins[pluginName] = nil
77 end
78end
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)
86 end
87 end
88end
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)
96 end
97 end
98end
99
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)
104end
105
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)
112 break
113 end
114 end
115end
116
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
125 end
126end
127
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]
135
136 if handlers then
137 for _, handler in ipairs(handlers) do
138 if handler.object and handler.functionName then
139 handler.handler(...)
140 else
141 plugin[hookName](...)
142 end
143 end
144 end
145 end
146 end
147end
148
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)
153end
154
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
160 self.Commands = {}
161 end
162 self.Commands[commandName] = callback
163end
164
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]
170 if command then
171 command(...)
172 else
173 print("Command not found:", commandName)
174 end
175end
176
177function FrameworkZ.Plugins.EveryOneMinute()
178 FrameworkZ.Plugins:ExecutePluginHook("EveryOneMinute")
179end
180Events.EveryOneMinute.Add(FrameworkZ.Plugins.EveryOneMinute)
181FrameworkZ.Plugins:AddEventHandler("EveryOneMinute")
182
183function FrameworkZ.Plugins.EveryTenMinutes()
184 FrameworkZ.Plugins:ExecutePluginHook("EveryTenMinutes")
185end
186Events.EveryTenMinutes.Add(FrameworkZ.Plugins.EveryTenMinutes)
187FrameworkZ.Plugins:AddEventHandler("EveryTenMinutes")
188
189function FrameworkZ.Plugins.EveryHours()
190 FrameworkZ.Plugins:ExecutePluginHook("EveryHours")
191end
192Events.EveryHours.Add(FrameworkZ.Plugins.EveryHours)
193FrameworkZ.Plugins:AddEventHandler("EveryHours")
194
195function FrameworkZ.Plugins.EveryDays()
196 FrameworkZ.Plugins:ExecutePluginHook("EveryDays")
197end
198Events.EveryDays.Add(FrameworkZ.Plugins.EveryDays)
199FrameworkZ.Plugins:AddEventHandler("EveryDays")
200
201function FrameworkZ.Plugins.OnAcceptedTrade(accepted)
202 FrameworkZ.Plugins:ExecutePluginHook("OnAcceptedTrade", accepted)
203end
204Events.AcceptedTrade.Add(FrameworkZ.Plugins.OnAcceptedTrade)
205FrameworkZ.Plugins:AddEventHandler("OnAcceptedTrade")
206
207function FrameworkZ.Plugins.LoadGridsquare(square)
208 FrameworkZ.Plugins:ExecutePluginHook("OnLoadGridsquare", square)
209end
210Events.LoadGridsquare.Add(FrameworkZ.Plugins.LoadGridsquare)
211FrameworkZ.Plugins:AddEventHandler("OnLoadGridsquare")
212
213function FrameworkZ.Plugins.OnPlayerDeath(player)
214 FrameworkZ.Plugins:ExecutePluginHook("OnPlayerDeath", player)
215end
216Events.OnPlayerDeath.Add(FrameworkZ.Plugins.OnPlayerDeath)
217FrameworkZ.Plugins:AddEventHandler("OnPlayerDeath")
218
219function FrameworkZ.Plugins.OnRequestTrade(player)
220 FrameworkZ.Plugins:ExecutePluginHook("OnRequestTrade", player)
221end
222Events.RequestTrade.Add(FrameworkZ.Plugins.OnRequestTrade)
223FrameworkZ.Plugins:AddEventHandler("OnRequestTrade")
void plugin()
void player
void name()
void local callback()
void local message
void self self
Definition MainMenu.lua:85
void local Events()
Plugins module for FrameworkZ. Extends the framework with modular plugins.
Definition Plugins.lua:5
FrameworkZ Plugins RegisteredPlugins
Definition Plugins.lua:9
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
Definition Plugins.lua:7
void UnloadPlugin(pluginName)
Unload a loaded plugin.
void RegisterCommand(commandName, callback)
Register a custom command for a plugin.
FrameworkZ Plugins BasePlugin
Definition Plugins.lua:19
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
Definition Plugins.lua:15
void OnAcceptedTrade(accepted)
void UnregisterPluginHook(pluginName, hookName)
Unregister a specific hook for a plugin.
void OnPlayerDeath(player)
void CreatePlugin(name)
void LoadPlugin(pluginName)
Load a registered plugin.
void RegisterPluginEventHandlers(plugin)
Register event handlers for a plugin.
FrameworkZ Plugins LoadedPlugins
Definition Plugins.lua:13
void LoadGridsquare(square)
void RegisterPlugin(plugin)
Register a plugin.
FrameworkZ Plugins Commands
Definition Plugins.lua:11
FrameworkZ global table.