Also update //for to make use of this new functionality.
//subdivide is still on the todo list.
The new functionality works by adding the new property `async = false` to command definition tables registered via wea_core.register_command()`. When `true`, if and only if the command's MAIN FUNC ONLY returns no values at all then it will consider an async operation to be in progress.
This delays `run_command` from emitting the `post-execute` event on `wea_core`.
Additionally, all async commands have a callback function injected as the first argument to their main `func` (ref main cmd definition table). This callback function -- if no arguments are returned by the main `func` -- must be called once the async operation is complete with same args you would normally return from `func` -- that is `success, result_message`. These will then be handled as normal and sent to the player as appropriate, as well as finally emitting the `post-execute` event.
BUG: There is a potential issue in this implementation, in that if i.e. `minetest.after()` is used to delay async execution then this will break out of the `xpcall()` protection in place to prevent crashes. To this end, if you implement an async function you need to be very careful, and do a manual `wea_core.safe_function()` call yourself!
This rovides an abstraction to fetch a worldedit command's definition,
regardless of where it was registered.
We would normally expect all commands to be registered in
wea_c.registered_commands, but before we only do a one-off pass to
import commands from worldedit should a new mod we aren't aware of
register a command with worldedit and get loaded after us, we won't
detect it - hencee the need for this function.