diff options
Diffstat (limited to 'client/applets/here.c')
-rw-r--r-- | client/applets/here.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/client/applets/here.c b/client/applets/here.c new file mode 100644 index 0000000..d2f61ef --- /dev/null +++ b/client/applets/here.c @@ -0,0 +1,92 @@ +#include "applet.h" + +#include <stdio.h> +#include <string.h> +#include <err.h> + +static int snd(const ac_entity_t *player, const char *prefix, const char *postfix) { + char m[512]; + if (prefix && !postfix) { + snprintf(m, 512, + "tellraw @a " + "[\"\",{\"text\":\"%s %s @ %s[x:%.0lf, y:%.0lf, z:%.0lf]\"}]", + player->name, + prefix, + get_world(player->world), + player->pos.x, + player->pos.y, + player->pos.z + ); + } else if (prefix && postfix) { + snprintf(m, 512, + "tellraw @a " + "[\"\",{\"text\":\"%s %s @ %s[x:%.0lf, y:%.0lf, z:%.0lf]: %s\"}]", + player->name, + prefix, + get_world(player->world), + player->pos.x, + player->pos.y, + player->pos.z, + postfix + ); + } else { + snprintf(m, 512, + "tellraw @a " + "[\"\",{\"text\":\"%s @ %s[x:%.0lf, y:%.0lf, z:%.0lf]\"}]", + player->name, + get_world(player->world), + player->pos.x, + player->pos.y, + player->pos.z + ); + } + ac_request_cmd_t cmd = { + .type = AC_REQUEST_CMD, + .id = 1, + .config = NULL, + .cmd = m + }; + int r; + if ((r = ac_request(connection, (ac_request_t *) &cmd))) { + return r; + } + return 0; +} + +void handle(ac_obj_t *obj) { + int r = 0; + switch (obj->type) { + case AC_RESPONSE_ERROR: { + ac_response_error_t *err = (ac_response_error_t *) obj; + fprintf(stderr, "Err: %s (%d).\n", err->message, err->code); + break; + } + case AC_EVENT_PLAYER_JOIN: { + ac_event_player_join_t *join = (ac_event_player_join_t *) obj; + r = snd(&join->player, "joined", NULL); + break; + } + case AC_EVENT_PLAYER_MESSAGE: { + ac_event_player_message_t *msg = (ac_event_player_message_t *) obj; + if (strncmp(".h", msg->text, 2)) { + break; + } + r = snd(&msg->player, NULL, NULL); + break; + } + case AC_RESPONSE_CMD_OUT: { + ac_response_cmd_out_t *out = (ac_response_cmd_out_t *) obj; + fprintf(stderr, "%s\n", out->out); + break; + } + case AC_RESPONSE_CMD_RESULT: { + ac_response_cmd_result_t *res = (ac_response_cmd_result_t *) obj; + if (!res->success) { + fprintf(stderr, "CmdErr: %d.\n", res->result); + } + break; + } + } + ac_object_free(obj); + if (r) errx(r, "Cannot send message: %d.", r); +} |