133 lines
4.9 KiB
C
133 lines
4.9 KiB
C
#ifndef PUMPKIN_API_H
|
|
#define PUMPKIN_API_H
|
|
|
|
#include "plugin.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct {
|
|
const char *name;
|
|
const char *version;
|
|
|
|
const char **authors;
|
|
size_t authors_count;
|
|
|
|
const char *description;
|
|
|
|
const char **dependencies;
|
|
size_t dependencies_count;
|
|
|
|
const char **permissions;
|
|
size_t permissions_count;
|
|
} pumpkin_metadata_t;
|
|
|
|
typedef void (*pumpkin_on_load_t)(plugin_own_context_t ctx);
|
|
typedef void (*pumpkin_on_unload_t)(plugin_own_context_t ctx);
|
|
typedef bool (*pumpkin_ipc_message_handler_t)(plugin_plugin_id_t *sender,
|
|
plugin_ipc_message_t *message,
|
|
plugin_ipc_message_t *ret,
|
|
plugin_string_t *err);
|
|
typedef pumpkin_metadata_t (*pumpkin_get_metadata_t)(void);
|
|
|
|
typedef void (*pumpkin_event_handler_t)(plugin_own_server_instance_t server,
|
|
plugin_event_t *event);
|
|
typedef bool (*pumpkin_command_handler_t)(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);
|
|
typedef void (*pumpkin_command_suggestion_handler_t)(
|
|
plugin_own_command_sender_t sender, plugin_own_server_instance_t server,
|
|
plugin_suggestion_request_t *request, plugin_command_suggestions_t *ret);
|
|
typedef void (*pumpkin_task_handler_t)(plugin_own_server_instance_t server);
|
|
typedef void (*pumpkin_chunk_generator_t)(plugin_generation_phase_t phase,
|
|
plugin_own_chunk_buffer_t chunk);
|
|
typedef bool (*pumpkin_ai_goal_predicate_t)(plugin_own_server_instance_t server,
|
|
plugin_own_entity_t entity);
|
|
typedef void (*pumpkin_ai_goal_action_t)(plugin_own_server_instance_t server,
|
|
plugin_own_entity_t entity);
|
|
|
|
typedef struct {
|
|
pumpkin_ai_goal_predicate_t can_start;
|
|
pumpkin_ai_goal_predicate_t should_continue;
|
|
pumpkin_ai_goal_action_t start;
|
|
pumpkin_ai_goal_action_t tick;
|
|
pumpkin_ai_goal_action_t stop;
|
|
} pumpkin_ai_goal_t;
|
|
|
|
typedef struct {
|
|
pumpkin_get_metadata_t get_metadata;
|
|
pumpkin_on_load_t on_load;
|
|
pumpkin_on_unload_t on_unload;
|
|
pumpkin_ipc_message_handler_t handle_ipc_message;
|
|
} pumpkin_plugin_t;
|
|
|
|
void pumpkin_register_plugin(pumpkin_plugin_t plugin);
|
|
|
|
#define REGISTER_PUMPKIN_PLUGIN(plugin) \
|
|
void exports_plugin_init_plugin(void) { pumpkin_register_plugin(plugin); }
|
|
|
|
static inline void pumpkin_context_register_event(
|
|
pumpkin_plugin_context_borrow_context_t self,
|
|
pumpkin_event_handler_t handler,
|
|
pumpkin_plugin_context_event_type_t event_type,
|
|
pumpkin_plugin_context_event_priority_t event_priority, bool blocking) {
|
|
pumpkin_plugin_context_method_context_register_event(
|
|
self, (uint32_t)(uintptr_t)handler, event_type, event_priority, blocking);
|
|
}
|
|
|
|
static inline uint32_t
|
|
pumpkin_scheduler_schedule_delayed_task(pumpkin_task_handler_t handler,
|
|
uint64_t delay_ticks) {
|
|
return pumpkin_plugin_scheduler_schedule_delayed_task(
|
|
(uint32_t)(uintptr_t)handler, delay_ticks);
|
|
}
|
|
|
|
static inline uint32_t
|
|
pumpkin_scheduler_schedule_repeating_task(pumpkin_task_handler_t handler,
|
|
uint64_t delay_ticks,
|
|
uint64_t period_ticks) {
|
|
return pumpkin_plugin_scheduler_schedule_repeating_task(
|
|
(uint32_t)(uintptr_t)handler, delay_ticks, period_ticks);
|
|
}
|
|
|
|
static inline void pumpkin_scheduler_cancel_task(uint32_t task_id) {
|
|
pumpkin_plugin_scheduler_cancel_task(task_id);
|
|
}
|
|
|
|
static inline void pumpkin_command_node_execute_with_handler(
|
|
pumpkin_plugin_command_borrow_command_node_t self,
|
|
pumpkin_command_handler_t handler) {
|
|
pumpkin_plugin_command_method_command_node_execute_with_handler_id(
|
|
self, (uint32_t)(uintptr_t)handler);
|
|
}
|
|
|
|
static inline void pumpkin_command_node_suggest_with_handler(
|
|
pumpkin_plugin_command_borrow_command_node_t self,
|
|
pumpkin_command_suggestion_handler_t handler) {
|
|
pumpkin_plugin_command_method_command_node_suggest_with_handler_id(
|
|
self, (uint32_t)(uintptr_t)handler);
|
|
}
|
|
|
|
static inline void
|
|
pumpkin_world_set_chunk_generator(pumpkin_plugin_world_borrow_world_t self,
|
|
pumpkin_chunk_generator_t handler) {
|
|
pumpkin_plugin_world_method_world_set_chunk_generator(
|
|
self, (uint32_t)(uintptr_t)handler);
|
|
}
|
|
|
|
static inline void
|
|
pumpkin_mob_add_custom_ai_goal(pumpkin_plugin_world_borrow_mob_t self,
|
|
uint8_t priority, pumpkin_ai_goal_t *goal) {
|
|
pumpkin_plugin_world_method_mob_add_custom_ai_goal(self, priority,
|
|
(uint32_t)(uintptr_t)goal);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|