pumpkin-api-c/pumpkin_api.h
2026-09-04 22:26:58 -07:00

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