aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--azalea-protocol/README.md23
1 files changed, 13 insertions, 10 deletions
diff --git a/azalea-protocol/README.md b/azalea-protocol/README.md
index b4741a3b..d2ad356e 100644
--- a/azalea-protocol/README.md
+++ b/azalea-protocol/README.md
@@ -12,13 +12,16 @@ Unfortunately, using azalea-protocol requires Rust nightly because [specializati
Adding new packets is usually pretty easy, but you'll want to have Minecraft's decompiled source code which you can obtain with tools such as [DecompilerMC](https://github.com/hube12/DecompilerMC).
-1. Find the packet in Minecraft's source code. Minecraft's packets are in the `net/minecraft/network/protocol/<state>` directory. The state for your packet is usually `game`.
-2. Add a new file in the [`packets/<state>`](./src/packets/game) directory with the snake_cased version of the name Minecraft uses.
-3. Copy the code from a similar packet and change the struct name.
-4. Add the fields from Minecraft's source code from either the read or write methods.
-If it's a `varint`, use `#[var] pub <name>: i32` (or u32 if it makes more sense).
-If it's a `varlong`, use `#[var] pub <name>: i64` (or u64).
-If it's a byte, use i8 or u8.
-Etc.. You can look at [wiki.vg](https://wiki.vg/Protocol) if you're not sure about how a packet is structured, but be aware that wiki.vg uses different names for most things.
-5. Add the packet to the `mod.rs` file in the same directory. You will have to look at [wiki.vg](https://wiki.vg/Protocol) to determine the packet id here.
-6. That's it! Format your code, submit a pull request, and wait for it to be reviewed.
+1. First, you'll need the packet id. You can get this from azalea-protocol error messages, or from wiki.vg.
+2. Run `python codegen/newpacket.py [packet id] [clientbound or serverbound] \[game/handshake/login/status\]`\
+3. Go to the directory where it told you the packet was generated. If there's no comments, you're done. Otherwise, keep going.
+4. Find the packet in Minecraft's source code. Minecraft's packets are in the `net/minecraft/network/protocol/<state>` directory. The state for your packet is usually `game`.
+5. Add the fields from Minecraft's source code from either the read or write methods. You can look at [wiki.vg](https://wiki.vg/Protocol) if you're not sure about how a packet is structured, but be aware that wiki.vg uses different names for most things.
+6. Format the code, submit a pull request, and wait for it to be reviewed.
+
+### Implementing packets
+
+You can manually implement reading and writing functionality for a packet by implementing McBufReadable and McBufWritable, but you can also have this automatically generated for a struct or enum by deriving McBuf.
+
+Look at other packets as an example.
+