Developer
Overview
ML Recycler provides server-side event hooks for reacting to recycler actions and handler hooks in the open/ folder for custom logic. Integration is primarily event-driven. Listen to the hook events from your other scripts.
Server Event Hooks
The recycler fires named events at key points. Register handlers in any server script:
Processing
your_script/server.lua
1AddEventHandler('ml_recycler:hook:itemAdded', function(source, data)
2 -- data: recyclerId, recyclerType, recyclerTier, slotIndex, itemName, itemCount, status
3end)
4
5AddEventHandler('ml_recycler:hook:processingComplete', function(data)
6 -- data: recyclerId, recyclerType, recyclerTier, slotIndex, itemName, itemCount, owner
7end)
8
9AddEventHandler('ml_recycler:hook:lootCollected', function(source, data)
10 -- data: recyclerId, recyclerType, slotIndex, loot (array of {item, count})
11end)Maintenance
your_script/server.lua
1AddEventHandler('ml_recycler:hook:refueled', function(source, data)
2 -- data: recyclerId, recyclerType, fuelItem, quantity, newFuel
3end)
4
5AddEventHandler('ml_recycler:hook:repaired', function(source, data)
6 -- data: recyclerId, recyclerType, repairItem, quantity, newDurability
7end)
8
9AddEventHandler('ml_recycler:hook:malfunction', function(source, data)
10 -- data: recyclerId, recyclerType, durability
11end)Upgrades
your_script/server.lua
1AddEventHandler('ml_recycler:hook:upgradeInstalled', function(source, data)
2 -- data: recyclerId, recyclerType, upgradeKey, upgrades (array)
3end)
4
5AddEventHandler('ml_recycler:hook:upgradeRemoved', function(source, data)
6 -- data: recyclerId, recyclerType, upgradeKey, upgrades (array)
7end)
8AddEventHandler('ml_recycler:hook:upgradeBroken', function(data)
9 -- data: recyclerId, recyclerType, upgradeKey (no source; fires from the server loop when a worn upgrade hits zero)
10end)Placement
your_script/server.lua
1AddEventHandler('ml_recycler:hook:recyclerPlaced', function(source, data)
2 -- data: recyclerId, recyclerType, coords, heading
3end)
4
5AddEventHandler('ml_recycler:hook:recyclerPickedUp', function(source, data)
6 -- data: recyclerId, recyclerType
7end)Server Handlers
Located in open/server.lua.
open/server.lua
1function OpenServer.BeforeGiveItem(src, item, amount)
2 return true -- return false to block
3end
4
5function OpenServer.OnActionComplete(src, actionType, data)
6endBeforeGiveItem: Called before giving loot items to the player. Returnfalseto block.OnActionComplete: Fires after any completed action.
Shared Handlers
Located in open/shared.lua.
open/shared.lua
1function OpenHandlers.OnPlayerAction(src, data)
2 return true -- return false to block
3end
4
5function OpenHandlers.ValidateAction(src, actionType)
6 return true -- return false to block
7endClient Handlers
Located in open/client.lua.
open/client.lua
1function OpenClient.BeforeOpenUI(data)
2 return true -- return false to block UI
3endExamples
your_script/server.lua
1AddEventHandler('ml_recycler:hook:lootCollected', function(source, data)
2 exports.ml_skills:AddXp(source, 'crafting', 15)
3end)your_script/server.lua
1AddEventHandler('ml_recycler:hook:lootCollected', function(source, data)
2 for _, loot in ipairs(data.loot) do
3 if loot.rarity == 'legendary' then
4 Bridge.Log({
5 webhook = 'YOUR_WEBHOOK',
6 title = 'Legendary Drop!',
7 description = loot.item .. ' x' .. loot.count,
8 player = source,
9 })
10 end
11 end
12end)open/shared.lua
1function OpenHandlers.ValidateAction(src, actionType)
2 if actionType == 'place' then
3 -- Add your zone check logic
4 end
5 return true
6end