diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-07-26 19:06:11 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-07-26 19:06:11 -0700 |
commit | d8fe269327a1a51f2588a3573a4764613da16388 (patch) | |
tree | 97bd20983700bb13eba7f7d524d3c6d529303b46 | |
parent | 31a5d2990ba666ce5ef4a1f79f7999a9bdfaac2a (diff) | |
download | acron-d8fe269327a1a51f2588a3573a4764613da16388.tar acron-d8fe269327a1a51f2588a3573a4764613da16388.tar.gz acron-d8fe269327a1a51f2588a3573a4764613da16388.tar.bz2 acron-d8fe269327a1a51f2588a3573a4764613da16388.zip |
Move the mod to mod/
-rw-r--r-- | README.md | 404 | ||||
-rw-r--r-- | mod/README.md | 403 | ||||
-rw-r--r-- | mod/acron.json (renamed from acron.json) | 0 | ||||
-rw-r--r-- | mod/build.gradle (renamed from build.gradle) | 0 | ||||
-rw-r--r-- | mod/gradle.properties (renamed from gradle.properties) | 0 | ||||
-rw-r--r-- | mod/settings.gradle (renamed from settings.gradle) | 0 | ||||
-rw-r--r-- | mod/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java (renamed from src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/Acron.java (renamed from src/main/java/moe/ymc/acron/Acron.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/MinecraftServerHolder.java (renamed from src/main/java/moe/ymc/acron/MinecraftServerHolder.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/auth/Action.java (renamed from src/main/java/moe/ymc/acron/auth/Action.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/auth/Client.java (renamed from src/main/java/moe/ymc/acron/auth/Client.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/auth/PolicyChecker.java (renamed from src/main/java/moe/ymc/acron/auth/PolicyChecker.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/auth/Rule.java (renamed from src/main/java/moe/ymc/acron/auth/Rule.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/c2s/ReqCmd.java (renamed from src/main/java/moe/ymc/acron/c2s/ReqCmd.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/c2s/ReqSetConfig.java (renamed from src/main/java/moe/ymc/acron/c2s/ReqSetConfig.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/c2s/Request.java (renamed from src/main/java/moe/ymc/acron/c2s/Request.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/cmd/CmdOut.java (renamed from src/main/java/moe/ymc/acron/cmd/CmdOut.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/cmd/CmdQueue.java (renamed from src/main/java/moe/ymc/acron/cmd/CmdQueue.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java (renamed from src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/cmd/CmdSrc.java (renamed from src/main/java/moe/ymc/acron/cmd/CmdSrc.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/common/Vec2f.java (renamed from src/main/java/moe/ymc/acron/common/Vec2f.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/common/Vec3d.java (renamed from src/main/java/moe/ymc/acron/common/Vec3d.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/common/WorldKey.java (renamed from src/main/java/moe/ymc/acron/common/WorldKey.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/Config.java (renamed from src/main/java/moe/ymc/acron/config/Config.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/ConfigReloadCmd.java (renamed from src/main/java/moe/ymc/acron/config/ConfigReloadCmd.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/json/Client.java (renamed from src/main/java/moe/ymc/acron/config/json/Client.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/json/Config.java (renamed from src/main/java/moe/ymc/acron/config/json/Config.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/json/ConfigDeserializationException.java (renamed from src/main/java/moe/ymc/acron/config/json/ConfigDeserializationException.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/json/ConfigDeserializer.java (renamed from src/main/java/moe/ymc/acron/config/json/ConfigDeserializer.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/json/ConfigJsonObject.java (renamed from src/main/java/moe/ymc/acron/config/json/ConfigJsonObject.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/config/json/Rule.java (renamed from src/main/java/moe/ymc/acron/config/json/Rule.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/jvav/Pair.java (renamed from src/main/java/moe/ymc/acron/jvav/Pair.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/LivingEntityMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/LivingEntityMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/MinecraftDedicatedServerMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/MinecraftDedicatedServerMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/MinecraftServerMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/MinecraftServerMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/ServerLoginNetworkHandlerMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/ServerLoginNetworkHandlerMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/ServerNetworkIoMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/ServerNetworkIoMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/ServerPlayNetworkHandlerMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/ServerPlayNetworkHandlerMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/mixin/ServerPlayerEntityMixin.java (renamed from src/main/java/moe/ymc/acron/mixin/ServerPlayerEntityMixin.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/net/AcronInitializer.java (renamed from src/main/java/moe/ymc/acron/net/AcronInitializer.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/net/Attributes.java (renamed from src/main/java/moe/ymc/acron/net/Attributes.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/net/AuthHandler.java (renamed from src/main/java/moe/ymc/acron/net/AuthHandler.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/net/ClientConfiguration.java (renamed from src/main/java/moe/ymc/acron/net/ClientConfiguration.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/net/ClientIdentification.java (renamed from src/main/java/moe/ymc/acron/net/ClientIdentification.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/net/HandshakeComplete.java (renamed from src/main/java/moe/ymc/acron/net/HandshakeComplete.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/net/WSFrameHandler.java (renamed from src/main/java/moe/ymc/acron/net/WSFrameHandler.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/Entity.java (renamed from src/main/java/moe/ymc/acron/s2c/Entity.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/Event.java (renamed from src/main/java/moe/ymc/acron/s2c/Event.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/EventQueue.java (renamed from src/main/java/moe/ymc/acron/s2c/EventQueue.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java (renamed from src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java (renamed from src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java (renamed from src/main/java/moe/ymc/acron/s2c/event/EventLagging.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java (renamed from src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java (renamed from src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java (renamed from src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java (renamed from src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/response/EventError.java (renamed from src/main/java/moe/ymc/acron/s2c/response/EventError.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/s2c/response/EventOk.java (renamed from src/main/java/moe/ymc/acron/s2c/response/EventOk.java) | 0 | ||||
-rw-r--r-- | mod/src/main/java/moe/ymc/acron/serialization/Serializer.java (renamed from src/main/java/moe/ymc/acron/serialization/Serializer.java) | 0 | ||||
-rw-r--r-- | mod/src/main/resources/acron.mixins.json (renamed from src/main/resources/acron.mixins.json) | 0 | ||||
-rw-r--r-- | mod/src/main/resources/fabric.mod.json (renamed from src/main/resources/fabric.mod.json) | 0 |
62 files changed, 410 insertions, 397 deletions
@@ -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. diff --git a/mod/README.md b/mod/README.md new file mode 100644 index 0000000..d84a718 --- /dev/null +++ b/mod/README.md @@ -0,0 +1,403 @@ +# Acron Server-Side Mod + +## Installation and Configuration + +See [README.md](../README.md). + +## Client API + +Acron uses polymorphic JSONs when communicating with clients. Therefore, each JSON +has to contain a valid `type` parameter indicating its type: + +```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. + diff --git a/acron.json b/mod/acron.json index 83edef5..83edef5 100644 --- a/acron.json +++ b/mod/acron.json diff --git a/build.gradle b/mod/build.gradle index 4ea402e..4ea402e 100644 --- a/build.gradle +++ b/mod/build.gradle diff --git a/gradle.properties b/mod/gradle.properties index 85e12c2..85e12c2 100644 --- a/gradle.properties +++ b/mod/gradle.properties diff --git a/settings.gradle b/mod/settings.gradle index f91a4fe..f91a4fe 100644 --- a/settings.gradle +++ b/mod/settings.gradle diff --git a/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java b/mod/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java index 51f05ff..51f05ff 100644 --- a/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java +++ b/mod/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java diff --git a/src/main/java/moe/ymc/acron/Acron.java b/mod/src/main/java/moe/ymc/acron/Acron.java index d6f6214..d6f6214 100644 --- a/src/main/java/moe/ymc/acron/Acron.java +++ b/mod/src/main/java/moe/ymc/acron/Acron.java diff --git a/src/main/java/moe/ymc/acron/MinecraftServerHolder.java b/mod/src/main/java/moe/ymc/acron/MinecraftServerHolder.java index f522884..f522884 100644 --- a/src/main/java/moe/ymc/acron/MinecraftServerHolder.java +++ b/mod/src/main/java/moe/ymc/acron/MinecraftServerHolder.java diff --git a/src/main/java/moe/ymc/acron/auth/Action.java b/mod/src/main/java/moe/ymc/acron/auth/Action.java index 17d29a3..17d29a3 100644 --- a/src/main/java/moe/ymc/acron/auth/Action.java +++ b/mod/src/main/java/moe/ymc/acron/auth/Action.java diff --git a/src/main/java/moe/ymc/acron/auth/Client.java b/mod/src/main/java/moe/ymc/acron/auth/Client.java index 2124ad4..2124ad4 100644 --- a/src/main/java/moe/ymc/acron/auth/Client.java +++ b/mod/src/main/java/moe/ymc/acron/auth/Client.java diff --git a/src/main/java/moe/ymc/acron/auth/PolicyChecker.java b/mod/src/main/java/moe/ymc/acron/auth/PolicyChecker.java index 2ab7b97..2ab7b97 100644 --- a/src/main/java/moe/ymc/acron/auth/PolicyChecker.java +++ b/mod/src/main/java/moe/ymc/acron/auth/PolicyChecker.java diff --git a/src/main/java/moe/ymc/acron/auth/Rule.java b/mod/src/main/java/moe/ymc/acron/auth/Rule.java index 55ad0d7..55ad0d7 100644 --- a/src/main/java/moe/ymc/acron/auth/Rule.java +++ b/mod/src/main/java/moe/ymc/acron/auth/Rule.java diff --git a/src/main/java/moe/ymc/acron/c2s/ReqCmd.java b/mod/src/main/java/moe/ymc/acron/c2s/ReqCmd.java index 6f34b07..6f34b07 100644 --- a/src/main/java/moe/ymc/acron/c2s/ReqCmd.java +++ b/mod/src/main/java/moe/ymc/acron/c2s/ReqCmd.java diff --git a/src/main/java/moe/ymc/acron/c2s/ReqSetConfig.java b/mod/src/main/java/moe/ymc/acron/c2s/ReqSetConfig.java index fcddf35..fcddf35 100644 --- a/src/main/java/moe/ymc/acron/c2s/ReqSetConfig.java +++ b/mod/src/main/java/moe/ymc/acron/c2s/ReqSetConfig.java diff --git a/src/main/java/moe/ymc/acron/c2s/Request.java b/mod/src/main/java/moe/ymc/acron/c2s/Request.java index af81705..af81705 100644 --- a/src/main/java/moe/ymc/acron/c2s/Request.java +++ b/mod/src/main/java/moe/ymc/acron/c2s/Request.java diff --git a/src/main/java/moe/ymc/acron/cmd/CmdOut.java b/mod/src/main/java/moe/ymc/acron/cmd/CmdOut.java index 55eadf1..55eadf1 100644 --- a/src/main/java/moe/ymc/acron/cmd/CmdOut.java +++ b/mod/src/main/java/moe/ymc/acron/cmd/CmdOut.java diff --git a/src/main/java/moe/ymc/acron/cmd/CmdQueue.java b/mod/src/main/java/moe/ymc/acron/cmd/CmdQueue.java index 3c49143..3c49143 100644 --- a/src/main/java/moe/ymc/acron/cmd/CmdQueue.java +++ b/mod/src/main/java/moe/ymc/acron/cmd/CmdQueue.java diff --git a/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java b/mod/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java index d22b77e..d22b77e 100644 --- a/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java +++ b/mod/src/main/java/moe/ymc/acron/cmd/CmdResConsumer.java diff --git a/src/main/java/moe/ymc/acron/cmd/CmdSrc.java b/mod/src/main/java/moe/ymc/acron/cmd/CmdSrc.java index 983b4ed..983b4ed 100644 --- a/src/main/java/moe/ymc/acron/cmd/CmdSrc.java +++ b/mod/src/main/java/moe/ymc/acron/cmd/CmdSrc.java diff --git a/src/main/java/moe/ymc/acron/common/Vec2f.java b/mod/src/main/java/moe/ymc/acron/common/Vec2f.java index 5ab3dfd..5ab3dfd 100644 --- a/src/main/java/moe/ymc/acron/common/Vec2f.java +++ b/mod/src/main/java/moe/ymc/acron/common/Vec2f.java diff --git a/src/main/java/moe/ymc/acron/common/Vec3d.java b/mod/src/main/java/moe/ymc/acron/common/Vec3d.java index 593019f..593019f 100644 --- a/src/main/java/moe/ymc/acron/common/Vec3d.java +++ b/mod/src/main/java/moe/ymc/acron/common/Vec3d.java diff --git a/src/main/java/moe/ymc/acron/common/WorldKey.java b/mod/src/main/java/moe/ymc/acron/common/WorldKey.java index fa10d54..fa10d54 100644 --- a/src/main/java/moe/ymc/acron/common/WorldKey.java +++ b/mod/src/main/java/moe/ymc/acron/common/WorldKey.java diff --git a/src/main/java/moe/ymc/acron/config/Config.java b/mod/src/main/java/moe/ymc/acron/config/Config.java index 3749c25..3749c25 100644 --- a/src/main/java/moe/ymc/acron/config/Config.java +++ b/mod/src/main/java/moe/ymc/acron/config/Config.java diff --git a/src/main/java/moe/ymc/acron/config/ConfigReloadCmd.java b/mod/src/main/java/moe/ymc/acron/config/ConfigReloadCmd.java index 2774c4d..2774c4d 100644 --- a/src/main/java/moe/ymc/acron/config/ConfigReloadCmd.java +++ b/mod/src/main/java/moe/ymc/acron/config/ConfigReloadCmd.java diff --git a/src/main/java/moe/ymc/acron/config/json/Client.java b/mod/src/main/java/moe/ymc/acron/config/json/Client.java index 4d31308..4d31308 100644 --- a/src/main/java/moe/ymc/acron/config/json/Client.java +++ b/mod/src/main/java/moe/ymc/acron/config/json/Client.java diff --git a/src/main/java/moe/ymc/acron/config/json/Config.java b/mod/src/main/java/moe/ymc/acron/config/json/Config.java index e8c5a83..e8c5a83 100644 --- a/src/main/java/moe/ymc/acron/config/json/Config.java +++ b/mod/src/main/java/moe/ymc/acron/config/json/Config.java diff --git a/src/main/java/moe/ymc/acron/config/json/ConfigDeserializationException.java b/mod/src/main/java/moe/ymc/acron/config/json/ConfigDeserializationException.java index baf5b35..baf5b35 100644 --- a/src/main/java/moe/ymc/acron/config/json/ConfigDeserializationException.java +++ b/mod/src/main/java/moe/ymc/acron/config/json/ConfigDeserializationException.java diff --git a/src/main/java/moe/ymc/acron/config/json/ConfigDeserializer.java b/mod/src/main/java/moe/ymc/acron/config/json/ConfigDeserializer.java index e91b355..e91b355 100644 --- a/src/main/java/moe/ymc/acron/config/json/ConfigDeserializer.java +++ b/mod/src/main/java/moe/ymc/acron/config/json/ConfigDeserializer.java diff --git a/src/main/java/moe/ymc/acron/config/json/ConfigJsonObject.java b/mod/src/main/java/moe/ymc/acron/config/json/ConfigJsonObject.java index 0efd9a9..0efd9a9 100644 --- a/src/main/java/moe/ymc/acron/config/json/ConfigJsonObject.java +++ b/mod/src/main/java/moe/ymc/acron/config/json/ConfigJsonObject.java diff --git a/src/main/java/moe/ymc/acron/config/json/Rule.java b/mod/src/main/java/moe/ymc/acron/config/json/Rule.java index 114e17d..114e17d 100644 --- a/src/main/java/moe/ymc/acron/config/json/Rule.java +++ b/mod/src/main/java/moe/ymc/acron/config/json/Rule.java diff --git a/src/main/java/moe/ymc/acron/jvav/Pair.java b/mod/src/main/java/moe/ymc/acron/jvav/Pair.java index 29b83dc..29b83dc 100644 --- a/src/main/java/moe/ymc/acron/jvav/Pair.java +++ b/mod/src/main/java/moe/ymc/acron/jvav/Pair.java diff --git a/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java index 9aaed2e..9aaed2e 100644 --- a/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java diff --git a/src/main/java/moe/ymc/acron/mixin/LivingEntityMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/LivingEntityMixin.java index 9e16569..9e16569 100644 --- a/src/main/java/moe/ymc/acron/mixin/LivingEntityMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/LivingEntityMixin.java diff --git a/src/main/java/moe/ymc/acron/mixin/MinecraftDedicatedServerMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/MinecraftDedicatedServerMixin.java index 32d2fbf..32d2fbf 100644 --- a/src/main/java/moe/ymc/acron/mixin/MinecraftDedicatedServerMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/MinecraftDedicatedServerMixin.java diff --git a/src/main/java/moe/ymc/acron/mixin/MinecraftServerMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/MinecraftServerMixin.java index cb813b4..cb813b4 100644 --- a/src/main/java/moe/ymc/acron/mixin/MinecraftServerMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/MinecraftServerMixin.java diff --git a/src/main/java/moe/ymc/acron/mixin/ServerLoginNetworkHandlerMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/ServerLoginNetworkHandlerMixin.java index 94a48b5..94a48b5 100644 --- a/src/main/java/moe/ymc/acron/mixin/ServerLoginNetworkHandlerMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/ServerLoginNetworkHandlerMixin.java diff --git a/src/main/java/moe/ymc/acron/mixin/ServerNetworkIoMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/ServerNetworkIoMixin.java index f49914e..f49914e 100644 --- a/src/main/java/moe/ymc/acron/mixin/ServerNetworkIoMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/ServerNetworkIoMixin.java diff --git a/src/main/java/moe/ymc/acron/mixin/ServerPlayNetworkHandlerMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/ServerPlayNetworkHandlerMixin.java index 58bef78..58bef78 100644 --- a/src/main/java/moe/ymc/acron/mixin/ServerPlayNetworkHandlerMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/ServerPlayNetworkHandlerMixin.java diff --git a/src/main/java/moe/ymc/acron/mixin/ServerPlayerEntityMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/ServerPlayerEntityMixin.java index 4c6758b..4c6758b 100644 --- a/src/main/java/moe/ymc/acron/mixin/ServerPlayerEntityMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/ServerPlayerEntityMixin.java diff --git a/src/main/java/moe/ymc/acron/net/AcronInitializer.java b/mod/src/main/java/moe/ymc/acron/net/AcronInitializer.java index c9953e3..c9953e3 100644 --- a/src/main/java/moe/ymc/acron/net/AcronInitializer.java +++ b/mod/src/main/java/moe/ymc/acron/net/AcronInitializer.java diff --git a/src/main/java/moe/ymc/acron/net/Attributes.java b/mod/src/main/java/moe/ymc/acron/net/Attributes.java index ddb0f5c..ddb0f5c 100644 --- a/src/main/java/moe/ymc/acron/net/Attributes.java +++ b/mod/src/main/java/moe/ymc/acron/net/Attributes.java diff --git a/src/main/java/moe/ymc/acron/net/AuthHandler.java b/mod/src/main/java/moe/ymc/acron/net/AuthHandler.java index 3e42e14..3e42e14 100644 --- a/src/main/java/moe/ymc/acron/net/AuthHandler.java +++ b/mod/src/main/java/moe/ymc/acron/net/AuthHandler.java diff --git a/src/main/java/moe/ymc/acron/net/ClientConfiguration.java b/mod/src/main/java/moe/ymc/acron/net/ClientConfiguration.java index 450ccd4..450ccd4 100644 --- a/src/main/java/moe/ymc/acron/net/ClientConfiguration.java +++ b/mod/src/main/java/moe/ymc/acron/net/ClientConfiguration.java diff --git a/src/main/java/moe/ymc/acron/net/ClientIdentification.java b/mod/src/main/java/moe/ymc/acron/net/ClientIdentification.java index 1cb4375..1cb4375 100644 --- a/src/main/java/moe/ymc/acron/net/ClientIdentification.java +++ b/mod/src/main/java/moe/ymc/acron/net/ClientIdentification.java diff --git a/src/main/java/moe/ymc/acron/net/HandshakeComplete.java b/mod/src/main/java/moe/ymc/acron/net/HandshakeComplete.java index 348b5e2..348b5e2 100644 --- a/src/main/java/moe/ymc/acron/net/HandshakeComplete.java +++ b/mod/src/main/java/moe/ymc/acron/net/HandshakeComplete.java diff --git a/src/main/java/moe/ymc/acron/net/WSFrameHandler.java b/mod/src/main/java/moe/ymc/acron/net/WSFrameHandler.java index 912e73a..912e73a 100644 --- a/src/main/java/moe/ymc/acron/net/WSFrameHandler.java +++ b/mod/src/main/java/moe/ymc/acron/net/WSFrameHandler.java diff --git a/src/main/java/moe/ymc/acron/s2c/Entity.java b/mod/src/main/java/moe/ymc/acron/s2c/Entity.java index 3e0add1..3e0add1 100644 --- a/src/main/java/moe/ymc/acron/s2c/Entity.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/Entity.java diff --git a/src/main/java/moe/ymc/acron/s2c/Event.java b/mod/src/main/java/moe/ymc/acron/s2c/Event.java index 1abc35c..1abc35c 100644 --- a/src/main/java/moe/ymc/acron/s2c/Event.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/Event.java diff --git a/src/main/java/moe/ymc/acron/s2c/EventQueue.java b/mod/src/main/java/moe/ymc/acron/s2c/EventQueue.java index 8c470a1..8c470a1 100644 --- a/src/main/java/moe/ymc/acron/s2c/EventQueue.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/EventQueue.java diff --git a/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java index 610fc58..610fc58 100644 --- a/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java diff --git a/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java index 4735241..4735241 100644 --- a/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java diff --git a/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java index 30974df..30974df 100644 --- a/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java diff --git a/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java index 408680b..408680b 100644 --- a/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java diff --git a/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java index 2769493..2769493 100644 --- a/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java diff --git a/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java index a4cb798..a4cb798 100644 --- a/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java diff --git a/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java index 8c1b6a9..8c1b6a9 100644 --- a/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java diff --git a/src/main/java/moe/ymc/acron/s2c/response/EventError.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventError.java index 370e8f3..370e8f3 100644 --- a/src/main/java/moe/ymc/acron/s2c/response/EventError.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventError.java diff --git a/src/main/java/moe/ymc/acron/s2c/response/EventOk.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventOk.java index eb8c82d..eb8c82d 100644 --- a/src/main/java/moe/ymc/acron/s2c/response/EventOk.java +++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventOk.java diff --git a/src/main/java/moe/ymc/acron/serialization/Serializer.java b/mod/src/main/java/moe/ymc/acron/serialization/Serializer.java index 8091c25..8091c25 100644 --- a/src/main/java/moe/ymc/acron/serialization/Serializer.java +++ b/mod/src/main/java/moe/ymc/acron/serialization/Serializer.java diff --git a/src/main/resources/acron.mixins.json b/mod/src/main/resources/acron.mixins.json index 5d0911f..5d0911f 100644 --- a/src/main/resources/acron.mixins.json +++ b/mod/src/main/resources/acron.mixins.json diff --git a/src/main/resources/fabric.mod.json b/mod/src/main/resources/fabric.mod.json index 999aeeb..999aeeb 100644 --- a/src/main/resources/fabric.mod.json +++ b/mod/src/main/resources/fabric.mod.json |