local clusterio_api = require("modules/clusterio/api") --- Top level module table, contains event handlers and public methods local MyModule = { events = {}, on_nth_tick = {}, } --- global is 'synced' between players, you should use your plugin name to avoid name conflicts -- The following helper function is desync safe and avoids name conflicts after being called during on_server_startup -- There are edge cases in the following events: pre player left, player left, console command, and config changed -- If you use any of these events and access globalData then make sure to call this function first local globalData = {} local function setupGlobalData() if global["__plugin_name__"] == nil then global["__plugin_name__"] = { -- starting values go here } end MyModule.on_load() end --- The on_load function is called independently for each client when they first load the map -- It should be used to restore global aliases and metatables not registered with script.register_metatable function MyModule.on_load() globalData = global["__plugin_name__"] end --- Public methods should be available though your top level module table function MyModule.foo() game.print("foo") end --- Private methods should be local to the file, this will prevent others from calling it local function bar() game.print("bar") end --- Clusterio provides a few custom events, on_server_startup is the most useful and should be used in place of on_init MyModule.events[clusterio_api.events.on_server_startup] = function(event) setupGlobalData() game.print(game.table_to_json(event)) end --- Factorio events are accessible through defines.events, you can have one handler per event per module MyModule.events[defines.events.on_player_crafted_item] = function(event) game.print(game.table_to_json(event)) //%if instance clusterio_api.send_json("__plugin_name__-plugin_example_ipc", { tick = game.tick, player_name = game.get_player(event.player_index).name }) //%endif end --- Nth tick is a special case that requires its own table, the index represents the time period between calls in ticks MyModule.on_nth_tick[300] = function() game.print(game.tick) bar() end --- Always return the top level module table from control, this is how clusterio will access your event handlers return MyModule