#include "pumpkin_api.h" #include #include static pumpkin_plugin_t g_plugin = {0}; void pumpkin_register_plugin(pumpkin_plugin_t plugin) { g_plugin = plugin; } // WIT exports void exports_pumpkin_plugin_metadata_get_metadata(exports_pumpkin_plugin_metadata_plugin_metadata_t *ret) { if (g_plugin.get_metadata) { pumpkin_metadata_t meta = g_plugin.get_metadata(); plugin_string_dup(&(ret->name), meta.name); plugin_string_dup(&(ret->version), meta.version); ret->authors.len = meta.authors_count; ret->authors.ptr = (plugin_string_t*)malloc(ret->authors.len * sizeof(plugin_string_t)); for (size_t i = 0; i < ret->authors.len; ++i) { plugin_string_dup(&(ret->authors.ptr[i]), meta.authors[i]); } plugin_string_dup(&(ret->description), meta.description); ret->dependencies.len = meta.dependencies_count; ret->dependencies.ptr = (plugin_string_t*)malloc(ret->dependencies.len * sizeof(plugin_string_t)); for (size_t i = 0; i < ret->dependencies.len; ++i) { plugin_string_dup(&(ret->dependencies.ptr[i]), meta.dependencies[i]); } ret->permissions.len = meta.permissions_count; ret->permissions.ptr = (plugin_string_t*)malloc(ret->permissions.len * sizeof(plugin_string_t)); for (size_t i = 0; i < ret->permissions.len; ++i) { plugin_string_dup(&(ret->permissions.ptr[i]), meta.permissions[i]); } } } bool exports_plugin_on_load(plugin_own_context_t context_handle, plugin_string_t *err) { if (g_plugin.on_load) { g_plugin.on_load(context_handle); } return true; } bool exports_plugin_on_unload(plugin_own_context_t context_handle, plugin_string_t *err) { if (g_plugin.on_unload) { g_plugin.on_unload(context_handle); } return true; } void exports_plugin_handle_event(uint32_t event_id, plugin_own_server_instance_t server, plugin_event_t *event, plugin_event_t *ret) { // Basic event pass-through *ret = *event; } bool exports_plugin_handle_command(uint32_t command_id, plugin_own_command_sender_t sender, plugin_own_server_instance_t server, plugin_own_consumed_args_t args, int32_t *ret, plugin_command_error_t *err) { err->tag = PUMPKIN_PLUGIN_COMMAND_COMMAND_ERROR_COMMAND_FAILED; plugin_string_t str; plugin_string_set(&str, "Command not implemented"); pumpkin_plugin_text_own_text_component_t text = pumpkin_plugin_text_static_text_component_text(&str); err->val.command_failed = text; return false; } void exports_plugin_handle_task(uint32_t handler_id, plugin_own_server_instance_t server) { }