mirror of
https://github.com/italicsjenga/valence.git
synced 2024-12-23 22:41:30 +11:00
eaf1e18610
## Description - `valence` and `valence_protocol` have been divided into smaller crates in order to parallelize the build and improve IDE responsiveness. In the process, code architecture has been made clearer by removing circular dependencies between modules. `valence` is now just a shell around the other crates. - `workspace.packages` and `workspace.dependencies` are now used. This makes dependency managements and crate configuration much easier. - `valence_protocol` is no more. Most things from `valence_protocol` ended up in `valence_core`. We won't advertise `valence_core` as a general-purpose protocol library since it contains too much valence-specific stuff. Closes #308. - Networking code (login, initial TCP connection handling, etc.) has been extracted into the `valence_network` crate. The API has been expanded and improved with better defaults. Player counts and initial connections to the server are now tracked separately. Player counts function by default without any user configuration. - Some crates like `valence_anvil`, `valence_network`, `valence_player_list`, `valence_inventory`, etc. are now optional. They can be enabled/disabled with feature flags and `DefaultPlugins` just like bevy. - Whole-server unit tests have been moved to `valence/src/tests` in order to avoid [cyclic dev-dependencies](https://github.com/rust-lang/cargo/issues/4242). - Tools like `valence_stresser` and `packet_inspector` have been moved to a new `tools` directory. Renamed `valence_stresser` to `stresser`. Closes #241. - Moved all benches to `valence/benches/` to make them easier to run and organize. Ignoring transitive dependencies and `valence_core`, here's what the dependency graph looks like now: ```mermaid graph TD network --> client client --> instance biome --> registry dimension --> registry instance --> biome instance --> dimension instance --> entity player_list --> client inventory --> client anvil --> instance entity --> block ``` ### Issues - Inventory tests inspect many private implementation details of the inventory module, forcing us to mark things as `pub` and `#[doc(hidden)]`. It would be ideal if the tests only looked at observable behavior. - Consider moving packets in `valence_core` elsewhere. `Particle` wants to use `BlockState`, but that's defined in `valence_block`, so we can't use it without causing cycles. - Unsure what exactly should go in `valence::prelude`. - This could use some more tests of course, but I'm holding off on that until I'm confident this is the direction we want to take things. ## TODOs - [x] Update examples. - [x] Update benches. - [x] Update main README. - [x] Add short READMEs to crates. - [x] Test new schedule to ensure behavior is the same. - [x] Update tools. - [x] Copy lints to all crates. - [x] Fix docs, clippy, etc.
121 lines
3.6 KiB
Markdown
121 lines
3.6 KiB
Markdown
# What's This?
|
|
|
|
The packet inspector is a Minecraft proxy for viewing the contents of packets as
|
|
they are sent/received. It uses Valence's protocol facilities to display packet
|
|
contents. This was made for three purposes:
|
|
|
|
- Check that packets between Valence and client are matching your expectations.
|
|
- Check that packets between vanilla server and client are parsed correctly by
|
|
Valence.
|
|
- Understand how the protocol works between the vanilla server and client.
|
|
|
|
# Usage
|
|
|
|
Firstly, we should have a server running that we're going to be
|
|
proxying/inspecting.
|
|
|
|
```sh
|
|
cargo r -r --example conway
|
|
```
|
|
|
|
Next up, we need to run the proxy server, this can be done in 2 different ways,
|
|
either using the GUI application (default) or using the `--nogui` flag to log
|
|
the packets to a terminal instance.
|
|
|
|
To assist, `--help` will produce the following:
|
|
|
|
```
|
|
A simple Minecraft proxy for inspecting packets.
|
|
|
|
Usage: packet_inspector [OPTIONS] [CLIENT_ADDR] [SERVER_ADDR]
|
|
|
|
Arguments:
|
|
[CLIENT_ADDR] The socket address to listen for connections on. This is the address clients should connect to
|
|
[SERVER_ADDR] The socket address the proxy will connect to. This is the address of the server
|
|
|
|
Options:
|
|
-m, --max-connections <MAX_CONNECTIONS>
|
|
The maximum number of connections allowed to the proxy. By default, there is no limit
|
|
--nogui
|
|
Disable the GUI. Logging to stdout
|
|
-i, --include-filter <INCLUDE_FILTER>
|
|
Only show packets that match the filter
|
|
-e, --exclude-filter <EXCLUDE_FILTER>
|
|
Hide packets that match the filter. Note: Only in effect if nogui is set
|
|
-h, --help
|
|
Print help
|
|
-V, --version
|
|
Print version
|
|
```
|
|
|
|
To launch in a Gui environment, simply launch `packet_inspector[.exe]` (or
|
|
`cargo r -r -p packet_inspector` to run from source). The gui will prompt you
|
|
for the `CLIENT_ADDR` and `SERVER_ADDR` if they have not been supplied via the
|
|
command line arguments.
|
|
|
|
In a terminal only environment, use the `--nogui` option and supply
|
|
`CLIENT_ADDR` and `SERVER_ADDR` as arguments.
|
|
|
|
```bash
|
|
cargo r -r -p packet_inspector -- --nogui 127.0.0.1:25566 127.0.0.1:25565
|
|
```
|
|
|
|
The client must connect to `localhost:25566`. You should see the packets in
|
|
`stdout` when running in `--nogui`, or you should see packets streaming in on
|
|
the Gui.
|
|
|
|
The `-i` and `-e` flags accept a regex to filter packets according to their
|
|
name. The `-i` regex includes matching packets while the `-e` regex excludes
|
|
matching packets. Do note that `-e` only applies in `--nogui` environment, as
|
|
the Gui has a "packet selector" to enable/disable packets dynamically. The `-i`
|
|
parameter value will be included in the `Filter` input field on the Gui.
|
|
|
|
For instance, if you only want to print the packets `Foo`, `Bar`, and `Baz`, you
|
|
can use a regex such as `^(Foo|Bar|Baz)$` with the `-i` flag.
|
|
|
|
```sh
|
|
cargo r -r -p packet_inspector -- --nogui 127.0.0.1:25566 127.0.0.1:25565 -i '^(Foo|Bar|Baz)$'
|
|
```
|
|
|
|
Packets are printed to `stdout` while errors are printed to `stderr`. If you
|
|
only want to see errors in your terminal, direct `stdout` elsewhere.
|
|
|
|
```sh
|
|
cargo r -r -p packet_inspector -- --nogui 127.0.0.1:25566 127.0.0.1:25565 > log.txt
|
|
```
|
|
|
|
## Quick start with Vanilla Server via Docker
|
|
|
|
Start the server
|
|
|
|
```sh
|
|
docker run -e EULA=TRUE -e ONLINE_MODE=false -d -p 25565:25565 --name mc itzg/minecraft-server
|
|
```
|
|
|
|
View server logs
|
|
|
|
```sh
|
|
docker logs -f mc
|
|
```
|
|
|
|
Server Rcon
|
|
|
|
```sh
|
|
docker exec -i mc rcon-cli
|
|
```
|
|
|
|
In a separate terminal, start the packet inspector.
|
|
|
|
```sh
|
|
cargo r -r -p packet_inspector -- --nogui 127.0.0.1:25566 127.0.0.1:25565
|
|
```
|
|
|
|
Open Minecraft and connect to `localhost:25566`.
|
|
|
|
Clean up
|
|
|
|
```
|
|
docker stop mc
|
|
docker rm mc
|
|
```
|