aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md404
1 files changed, 7 insertions, 397 deletions
diff --git a/README.md b/README.md
index aa7f24f..a82b37b 100644
--- a/README.md
+++ b/README.md
@@ -46,9 +46,9 @@ For each response JSON parameter, the format is:
`(JSON path)` (type, limit, always present or conditions): Description.
-## Installation
+## Installing the mod
-To build this mod, you need to run `gradle build`, and the output JAR will be at `build/libs/acron-x.x.jar`.
+To build this mod, you need to run `gradle build` inside `mod/`, and the output JAR will be at `build/libs/acron-x.x.jar`.
Then, copy it to the `mods/` folder in your Minecraft server working directory.
@@ -164,402 +164,12 @@ Note, listen port and address cannot be changed during runtime.
> it will print a warning and skip the whole new configuration file until the
> error is fixed.
-## Client API
+## Using the client
-Acron uses polymorphic JSONs when communicating with clients. Therefore, each JSON
-has to contain a valid `type` parameter indicating its type:
+As Acron has an open protocol, it is easy to implement the client-side service on your own. However, Acron officially
+has [libacron](client/libacron), a client library written in C.
-```json
-{
- "type": "cmd",
- "id": 1,
- "cmd": "list"
-}
-```
-
-### Request ordering
-
-To work in a full-duplex environment, each command can specify a `id` parameter. Acron will
-return any results or errors with the same ID.
-
-Sample request:
-
-```json
-{
- "type": "cmd",
- "id": 1,
- "cmd": "list"
-}
-```
-
-The parameter `id` can be any integer, but it is the client developer's responsibility to
-make it a unique value, so he or she can identify it.
-
-Parameter `id` defaults to -1.
-
-In response, any non-server-push responses (i. e. messages) will include the same `id` parameter:
-
-```json
-{
- "type": "cmd_result",
- "id": 1,
- "result": 0,
- "success": true
-}
-```
-
-If the server fails to parse the request and returns an error, it will report the default ID `-2`.
-
-### Error Handling
-
-Error handling: Besides from the handshake request, which will send errors using HTTP status
-codes, all faulty WebSocket requests will receive error in the following format:
-
-```json
-{
- "type": "error",
- "id": 1,
- "code": 500,
- "message": "Error message. Not machine-readable."
-}
-```
-
-Parameters:
-
-* `.code` (int, HTTP status codes, always present): The machine-readable error code (e. g. 400 for Bad Request).
-* `.message` (string, any, always present): The human-readable error message.
-
-Global error codes:
-
-* 400: The request is invalid.
-* 500: The server encountered an unknown error.
-
-**`.type` and `.id` are included in every request / response, except for further noticed. Thus,
-this document excludes them from the parameter lists.**
-
-### Handshaking
-
-Clients need to use the following connection string when connecting to the Acron server:
-
-```
-ws://host:port/ws?id=client_id&token=client_token&version=0
-```
-
-*A better approach for specifying the authentication parameters is using HTTP headers,
-but the JavaScript client does not allow so. To extend compatibility, Acron forces
-all users to use HTTP query parameters to supply information.*
-
-Parameters:
-
-* `id` (required): Client ID set by the administrator.
-* `token` (required): Client token set by the administrator.
-* `version` (default: 0): API version. Only 0 is accepted at this time.
-
-Responses:
-
-* HTTP 400 (Bad Request): If either `id` or `token` is missing, or `version` is not 0.
-* HTTP 401 (Unauthorized): If either `id` is not found or `token` does not match the record.
-* HTTP 101 (Switching Protocols): The handshake is complete, and the server is upgrading to
-WebSocket.
-
-### Setting Configuration
-
-This allows clients to set a per-connection default configuration to execute commands.
-
-Clients can override the configuration temporarily when executing commands.
-
-Request:
-```json
-{
- "type": "set_config",
- "id": 1,
- "world": "overworld",
- "pos": {
- "x": 0.0,
- "y": 0.0,
- "z": 0.0
- },
- "rot": {
- "x": 0.0,
- "y": 0.0
- },
- "name": ""
-}
-```
-
-Parameters:
-
-* `.world` (enum, overworld / nether / end, overworld): The world to run commands in.
-* `.pos` (vec3d, *see below*, spawn point of `.world`): The position to run commands at.
- * `.x` (double, any within border limit, 0.0): X
- * `.y` (double, any within border limit, 0.0): Y
- * `.z` (double, any within border limit, 0.0): Z
-* `.rot` (vec2f, *see below*, `0.0 0.0`): Rotation.
- * `.x` (float, ?, 0.0): X
- * `.z` (float, ?, 0.0): Z
-* `.name` (string, any, random): Name when running commands.
-
-When the client connects, Acron will set the configuration to default values.
-
-Successful response:
-
-```json
-{
- "type": "ok"
-}
-```
-
-This shows that the configuration update is successful.
-
-### Executing Commands
-
-The main goal of Acron is to allow clients to run commands. A client can send
-any commands, and Acron will schedule them in the background.
-
-Request:
-
-```json
-{
- "type": "cmd",
- "id": 1,
- "cmd": "list",
- "config": {
-
- }
-}
-```
-
-Parameters:
-
-* `.cmd` (string, any valid command, required): The command to execute. It may or may not begin with `/`.
-* `.config` (set_config, *see above*, current connection default configuration): Temporary configuration
-when running this command. It is the same `set_config` object in the above section, but `type` and `id`
-must not be supplied.
-
-Successful response:
-
-```json
-{
- "type": "ok"
-}
-```
-
-This shows that the command is scheduled.
-
-If the connection breaks before it is done, it is still executed without any output to the connection.
-
-Possible failures:
-
-* 403: This client is not allowed to execute this command. (Configured by rules)
-
-**Command output:**
-
-When the command prints a line, Acron will send the following response:
-
-```json
-{
- "type": "cmd_out",
- "id": 1,
- "sender": "UUID",
- "out": "..."
-}
-```
-
-Parameters:
-
-* `.sender` (UUID, any UUID, always present): Sender UUID.
-* `.out` (string, any, always present): Output.
-
-**Command result:**
-
-When the command finishes without issues (?), Acron will send the following response:
-
-```json
-{
- "type": "cmd_result",
- "id": 1,
- "result": 0,
- "success": true
-}
-```
-
-All parameters always present.
-
-> **Note**
->
-> The result completely depends on Minecraft server's response.
-> It may not be reliable, and the values of `.result` and `.success` are
-> undocumented.
-
-### Receiving Messages
-
-Another major part of Acron is to allow clients receive events from the server.
-
-Every event will have a pre-defined `type` with other custom parameters. Parameter `id` will not
-present in events.
-
-> **Contributor Guide**
->
-> Internally, all message Acron sends to clients are called events, including
-> command results.
-
-#### Player joined
-
-Response:
-
-```json
-{
- "type": "join",
- "player": {
- "name": "",
- "uuid": "",
- "pos": {
- "x": 0.0,
- "y": 0.0,
- "z": 0.0
- },
- "world": "end"
- }
-}
-```
-
-Parameters:
-
-* `.player` (entity, see below, always present): The player.
- * `.name` (string, any valid Minecraft username, always present): Username.
- * `.uuid` (uuid, UUID, always present): UUID.
- * `.pos` (vec3d, see below, always present): The position he or she joins.
- * `.x` (double, any within border limit, 0.0): X
- * `.y` (double, any within border limit, 0.0): Y
- * `.z` (double, any within border limit, 0.0): Z
- * `.world` (enum, overworld / nether / end, not present if Acron cannot determine the world): The dimension
-he or she joins.
-
-#### Player Disconnected
-
-Response:
-
-```json
-{
- "type": "disconnect",
- "player": {
- "name": "",
- "uuid": "",
- "pos": {
- "x": 0.0,
- "y": 0.0,
- "z": 0.0
- },
- "world": "end"
- },
- "reason": ""
-}
-```
-
-Parameters:
-
-* `.player` (entity, see below, null only when the server cannot verify the user): The player.
- * `.name` (string, any valid Minecraft username, always present): Username.
- * `.uuid` (uuid, UUID, always present): UUID.
- * `.pos` (vec3d, see below, always present): The position he or she leaves.
- * `.x` (double, any within border limit, 0.0): X
- * `.y` (double, any within border limit, 0.0): Y
- * `.z` (double, any within border limit, 0.0): Z
- * `.world` (enum, overworld / nether / end, not present if Acron cannot determine the world): The dimension
- he or she leaves.
-* `.reason` (string, any valid disconnect reason, always present): Disconnect reason.
-
-#### Player Message
-
-Response:
-
-```json
-{
- "type": "message",
- "player": {
- "name": "",
- "uuid": "",
- "pos": {
- "x": 0.0,
- "y": 0.0,
- "z": 0.0
- },
- "world": "end"
- },
- "text": ""
-}
-```
-
-Parameters:
-
-* `.player` (entity, see below, always present): The player.
- * `.name` (string, any valid Minecraft username, always present): Username.
- * `.uuid` (uuid, UUID, always present): UUID.
- * `.pos` (vec3d, see below, always present): The position he or she sends the message.
- * `.x` (double, any within border limit, 0.0): X
- * `.y` (double, any within border limit, 0.0): Y
- * `.z` (double, any within border limit, 0.0): Z
- * `.world` (enum, overworld / nether / end, not present if Acron cannot determine the world): The dimension
-he or she sends the message.
-* `.text` (string, any valid Minecraft message, always present): The message.
-
-#### Entity Death
-
-Response:
-
-```json
-{
- "type": "death",
- "entity": {
- "name": "",
- "uuid": "",
- "pos": {
- "x": 0.0,
- "y": 0.0,
- "z": 0.0
- },
- "world": "end"
- },
- "message": ""
-}
-```
-
-Parameters:
-
-* `.entity` (entity, see below, always present): The entity.
- * `.name` (string, any, always present): Default name or custom name of the entity.
- * `.uuid` (uuid, UUID, always present): UUID.
- * `.pos` (vec3d, see below, always present): The position of the entity when died.
- * `.x` (double, any within border limit, 0.0): X
- * `.y` (double, any within border limit, 0.0): Y
- * `.z` (double, any within border limit, 0.0): Z
- * `.world` (enum, overworld / nether / end, not present if Acron cannot determine the world): The dimension
-of the entity when died.
-* `.message` (string, any valid death message, always present): The user-readable death message.
-
-> **Roadmap**
->
-> Parsing the death message and sending a more machine-readable message is on the roadmap.
-
-#### Server Lagging
-
-Acron will send this event when the server prints
-`Can't keep up! Is the server overloaded? Running 4313ms or 86 ticks behind` to the standard output.
-
-Response:
-
-```json
-{
- "type": "lagging",
- "ms": 100,
- "ticks": 1000
-}
-```
-
-Parameters:
-
-* `.ms` (long, >= 0, always present): Running {}ms behind.
-* `.ticks` (long, >= 0, always present): Running {} ticks behind.
+Acron also provides a cli tool: [acronc(1)](client/acronc) for administrators.
## Contributing
@@ -569,4 +179,4 @@ the email subject. If you are sending a patch, please include `[PATCH]` in the s
## License
-Acron is licensed under GPL-2.0-only except libac is licensed under LGPL-2.1-only.
+Acron is licensed under GPL-2.0-only except [libacron](client/libacron) is licensed under LGPL-2.1-only.