aboutsummaryrefslogtreecommitdiff
path: root/client/applets/here.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/applets/here.c')
-rw-r--r--client/applets/here.c92
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);
+}