From 77d0262089ab1fe62ebff3af70cf3d2fe347cf39 Mon Sep 17 00:00:00 2001 From: LAX1DUDE Date: Sat, 2 Apr 2022 18:33:20 -0700 Subject: [PATCH] Update README.md for queries.json --- README.md | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 92 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1df5499..253c7cf 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ You will find a new 'EaglerMOTD' folder in the plugins folder you put the jar in - `players` *(Optional)* Changes the list of players shown when the mouse is hovering over the online/max count in the multiplayer screen. use `"default"` to reset it and show the real list of players instead of spoofing it -- `icon` *(Optional)* A JPEG/PNG/BMP/GIF to display as the server icon. The icon must be at least 64x64 pixels. **Transparency is supported.** The top left 64x64 pixels of the image are displayed if the image is larger than 64x64 pixels. **Animated GIF files are not supported, they load but only display the first frame.** Setting the icon resets the values of `icon_spriteX`, `icon_spriteY`, `icon_color`, `icon_tint`, `icon_flipX`, `icon_flipY`, and `icon_rotate` **to their default values.** Setting to `"none"` will reset everything and set the icon to be black and 100% transparent +- `icon` *(Optional)* A JPEG/PNG/BMP/GIF to display as the server icon. The icon must be at least 64x64 pixels. **Transparency is supported.** The top left 64x64 pixels of the image are displayed if the image is larger than 64x64 pixels. **Animated GIF files are not supported, they load but only display the first frame.** Setting the icon resets the values of `icon_spriteX`, `icon_spriteY`, `icon_color`, `icon_tint`, `icon_flipX`, `icon_flipY`, and `icon_rotate` **to their default values.** Setting to `"none"` will reset everything and set the icon to be black and 100% transparent. **The icon's file name is relative to the folder EaglercraftBungee is currently running in**, not the folder where the JSON file is stored. - `icon_spriteX` *(Optional)* defines the X coordinate to read a 64x64 pixel portion of the current `"icon"` file, if the file is larger than 64x64. The value is multiplied by 64 to get the exact pixel coordinate in the image to read from. `"icon_spriteX": 2` will read a 64x64 pixel portion of a larger image beginning at 128 pixels X and 0 pixels Y of the current `"icon"` file. Default is 0 - `icon_spriteY` *(Optional)* defines the Y coordinate to read a 64x64 pixel portion of the current `"icon"` file, if the file is larger than 64x64. The value is multiplied by 64 to get the exact pixel coordinate in the image to read from. `"icon_spriteY": 2` will read a 64x64 pixel portion of a larger image beginning at 0 pixels X and 128 pixels Y of the current `"icon"` file. Default is 0. Setting, for example, `"icon_spriteX": 1` and `"icon_spriteY": 2` will read a 64x64 pixel portion of the current `"icon"` file beginning at 64 pixels X and 128 pixels Y. @@ -151,6 +151,96 @@ You will find a new 'EaglerMOTD' folder in the plugins folder you put the jar in - `icon_rotate` *(Optional)* rotates the icon 90°, 180°, or 270° clockwise (`0` = 0°, `1` = 90°, `2` = 180°, `3` = 270°) +### Queries.json: + +**This has nothing to do with MOTD, skip this part if you're just trying to add an animated MOTD** + +**This file allows you to configure custom** `Accept:` **handlers to EaglercraftBungee to provide more custom statistics to 3rd party server lists and crawlers** + +```json +{ + "queries": { + "ExampleQuery1": { + "type": "ExampleQuery1_result", + "string": "This is a string" + }, + "ExampleQuery2": { + "type": "ExampleQuery2_result", + "txt": "query2.txt" + }, + "ExampleQuery3": { + "type": "ExampleQuery3_result", + "string": "This query returns binary", + "file": "binary.dat" + }, + "ExampleQuery4": { + "type": "ExampleQuery4_result", + "json": "query4.json" + }, + "ExampleQuery5": { + "type": "ExampleQuery5_result", + "json": { + "key1": "value1", + "key2": "value2" + } + }, + "ExampleQuery6": { + "type": "ExampleQuery6_result", + "json": { + "desc": "This query returns JSON and a file", + "filename": "test_file.dat", + "size": 69 + }, + "file": "test_file.dat" + } + } +} +``` + +`"queries"` contains a JSON object, each variable in this JSON object is the name of a query and the value is a JSON object containing the type of response and the content of the `"data"` value in the response + +**Here is an example of a server's response to a generic query:** + +```json +{ + "type": "", + "data": "", + "vers": "0.1.0", + "name": "EaglercraftBungee Server", + "time": 1648946954405, + "brand": "Eagtek", + "cracked": true +} +``` + +`"type"` **is just a generic string you can set to hint to the client what kind of response you are sending, and** `"data"` **stores the actually data of the response, and can be either a string or JSON object** + +**Binary WebSocket packets can also be sent to a client, their format can be completely arbitrary and arrive containing the same raw unformatted data that was sent. They accompany a regular JSON response, the** `"type"` **and/or** `"data"` **value of the JSON response can be used to hint to the client when a raw binary packet is present** + +The `"vers"`, `"name"`, `"time"`, `"brand"`, and `"cracked"` values are added internally by the server and cannot be changed + +### Queries.json Format: + +The file contains a JSON object with a `"queries"` value which contains a map of keys matching `Accept:` types to JSON objects + +The JSON objects contain the `"type"` of response to send and what the `"data"` for that response should be. Also, a path to a binary file can be specified. + +**All files specified in queries.json are RELOADED AUTOMATICALLY when changes are detected.** This allows you to dynamically update the response for certain queries without `motd-reload` because you can just edit the file the query is configured to read and it will update the version cached in memory automatically. + +To add or edit an entry in queries.json, you need to define: +- `type`, which determines the string in the `"type"` field of the response sent to the client + +Then, you must define **one** of: +- `json` *(object)* A JSON object to send as `"data"` in the response +- `json` *(string)* A path to a file (relative to your EaglercraftBungee folder) to parse as a JSON object and send as JSON as `"data"` in the response +- `txt` A path to a text file (relative to your EaglercraftBungee folder) to send as a string as `"data"` in the response +- `string` A string to send as `"data"` in the response + +Optionally, you can define: +- `file` A path to an adittional binary file (relative to your EaglercraftBungee folder) to send as a binary WebSocket packet after sending the first JSON response containing the `"data"` from the required `json`, `txt`, or `string` value. This file is also reloaded automatically + +**Use** `motd-reload` **to reload queries.json** + ## Compiling and Contributing First, download the latest [EaglercraftBungee jar](https://github.com/LAX1DUDE/eaglercraft/blob/main/stable-download/java/bungee_command/bungee-dist.jar) in stable-download on [LAX1DUDE/eaglercraft](https://github.com/LAX1DUDE/eaglercraft/) @@ -161,4 +251,4 @@ First, download the latest [EaglercraftBungee jar](https://github.com/LAX1DUDE/e Export the contents of 'src' folder of the project to a JAR file to compile the plugin -**For a PR:** Tabs, not spaces, and format the code like the Eclipse auto format tool on factory settings. \ No newline at end of file +**For a PR:** Tabs, not spaces, and format the code like the Eclipse auto format tool on factory settings.