Commit graph

170 commits

Author SHA1 Message Date
Carson McManus
59ca1ab573
Set up Inventory module (#75)
This is a very rough version of the inventory module and associated features. This will be a good base to start building something more robust.

- adds a player inventory to all clients
- makes clients keep track of what inventory they have open
- adds very naive state sync for inventories

related: #53 

# Test plans

### Building

1. run `building` example
2. pick any block from creative
3. place it
4. pick a different block from creative
5. place 2
6. break the last one
7. see that both remaining blocks don't become dirt

### Chest inventories

1. run `chest` example
2. sneak to give yourself a stone block
3. open the chest (it's invisible on top of the stone block)
4. place stone in chest
5. see the stone moving around in the chest

## Known Issues

To be fixed in later PRs

- It's very easy to duplicate items if you take the stone out of the chest on the same tick as the server trying to move the item.
- The chest is invisible when you spawn in. It appears if you break it.
- `get_slot` and `set_slot` can panic.
2022-10-15 19:47:02 -07:00
Ryan Johnson
f58e6662dd
Add performance tests (#113)
Adds the performance_tests/ directory.

In the future we could use our own fake client software instead of
rust-mc-bot. This would make it easier to run the tests.
2022-10-14 21:18:03 -07:00
Ryan
a53738355f Fix bug in ident and use AsRef instead of Borrow 2022-10-13 22:28:12 -07:00
Ryan Johnson
056b4ebd32
Correctly encode biomes (#112) 2022-10-13 18:19:35 -07:00
Sekky61
a29542b467
Dying and respawning (#51)
* `RespawnRequest` client event

* `CombatDeath` packet

* `kill` client method

* `death.rs` example

* clippy lint fix

* Clean up examples

* Fix formatting

* `win_game`, `set_respawn_screen` client methods

* respawn screen no longer deferred
This means that death example does not have respawn screen now.

Co-authored-by: Ryan <ryanj00a@gmail.com>
2022-10-12 11:11:33 -07:00
Ryan Johnson
7d0c254874
Rewrite ident module (again) (#111)
Ident is now a wrapper around any string type `S`.
2022-10-12 03:53:59 -07:00
Ryan
afe390836c Remove dbg! calls and make some tweaks to Ident 2022-10-11 14:05:00 -07:00
Zh_Jk
e30ed62240
Fix typo in c2s.rs (#109) 2022-10-11 11:12:06 -07:00
Carson McManus
a02b657f3c
clamp ItemStack item count to range 1-127 (#110) 2022-10-11 11:10:04 -07:00
Ryan Johnson
23fdc41610
Clean up ident module and add lifetime (#108)
This lifetime will be useful for zero-copy decoding later.
2022-10-11 01:10:49 -07:00
Tert0
c758f70c33
Implement Weather (#106)
* implemented raining, rain level and thunder level

* fix linter and cargo fmt

* removed field from the client, removed weather getters, added docs, ensuring valid rain/thunder level values and sending weather changing directly

* Remove results from `set_rain_level` and `set_thunder_level`

* Remove unused import

Co-authored-by: Ryan <ryanj00a@gmail.com>
2022-10-09 15:18:15 -07:00
Carson McManus
0652fa13a4
change Slot enum into alias of Option<ItemStack> (#107) 2022-10-09 12:38:00 -07:00
Daniel Huth
e13d0ffe7a
Skip spawn of non visible player characters (#100)
* Skip spawn of non visible player characters
* Don't spawn player if player list is `None`

Co-authored-by: Ryan <ryanj00a@gmail.com>
2022-10-08 15:12:30 -07:00
Ryan Johnson
153cde1a04
Chunk Rewrite With Paletted Containers (#91)
The current approach to managing chunk data is misconceived. This new approach uses genuine paletted containers and does not suffer from complexities caused by caching. As a result, memory usage (according to htop) in the terrain example with render distance = 32 has gone from 785 megs to 137 megs. That's 17.4% of the memory it used to use. Terrain generation speed was not affected.
2022-10-07 15:52:55 -07:00
Ryan
1fcc5bd527 Set player head yaw when spawning 2022-10-05 15:02:40 -07:00
EmperialDev
1f996f7549
Add Items (#92)
Adding all the items, just like the blocks are. This will adress 1. and 2. bullet from issue #53
This will also make it easier to convert between block <-> item.
2022-10-05 09:28:08 -07:00
Ryan
e985bae469 Use StatusCode in auth server response check 2022-10-04 23:35:34 -07:00
Terminator
b83b9f76ed
Expose enchantments to Rust (#99)
* Expose extracted enchantments to Rust.

* Give enchantments a `level: i16` field.

* Update enchantment derive impls

* Restructure how enchants are exposed to Rust through C-like enums

* Update build/enchant.rs

Co-authored-by: Ryan Johnson <ryanj00a@gmail.com>

* Update build/enchant.rs

Co-authored-by: Ryan Johnson <ryanj00a@gmail.com>

* Move enchantment sources to their own struct.

* make id() function return it's discriminant instead of matching

Co-authored-by: Ryan Johnson <ryanj00a@gmail.com>
2022-10-03 13:19:42 -07:00
Terminator
ef64296159
Implement prevent-proxy-connections
This adds the `prevent-proxy-connections` server property and implements it into valence.

Note that if the server is in offline mode, this changes nothing.

By default, proxy connections are allowed.

Fixes #95
2022-10-01 10:42:43 -07:00
Ryan Johnson
a623c9b1f0 fix formatting 2022-09-26 22:32:04 -07:00
Ryan Johnson
ca89140ebe rustdoc checks to github actions 2022-09-26 22:30:42 -07:00
Ryan Johnson
25e99a4133 Fix SetTitleAnimationTimes doc link 2022-09-26 21:08:37 -07:00
Ryan Johnson
82152c5e5d More docs on protocol module 2022-09-26 21:08:17 -07:00
Carson McManus
47538ea05c
Refactor Slot (#87)
* create ItemStack type

* move slot back into protocol

* change DropItemStack to use ItemStack, because it's imposible to drop nothing
2022-09-26 20:44:06 -07:00
Ryan
1dc5d84ba9 Add biomes example (which is currently broken due to bugs in chunk module) 2022-09-23 19:10:11 -07:00
Ryan
28b26b2aae Reorganize registry codec stuff and fix some bugs 2022-09-23 04:51:26 -07:00
Ryan Johnson
36b63e777e
Replace serde_nbt with valence_nbt (#80)
valence_nbt has a much nicer API and avoids the complications brought by integrating with serde. valence_nbt also fixes some bugs and is 3x faster according to benchmarks.
2022-09-23 04:03:21 -07:00
dani162
eed39364df
Set time of day #55 (#76)
* Set time of day #55

* fix typo

* Update src/client.rs

Co-authored-by: Ryan Johnson <ryanj00a@gmail.com>

* format file

Co-authored-by: Ryan Johnson <ryanj00a@gmail.com>
2022-09-21 15:12:31 -07:00
dani162
77ad1dfdd1
Listen on any network interfaces #77 (#79) 2022-09-21 15:11:45 -07:00
Ryan
b13fe32f76 Only set center chunk when crossing chunk borders, not sections 2022-09-19 21:03:39 -07:00
Tim Satke
d9b7008827
Add methods to Config to use a custom session server (#72)
* Add methods to Config to use a custom session server

Added new methods to the Config trait, that enables
implementors to use a custom session server host
or even a fully custom URL.

* Fix error in documentation

* Make format_session_server_url return a String
2022-09-19 20:23:39 -07:00
Ryan
d25f3674fb Acknowledge only the latest dug block sequence 2022-09-19 19:19:20 -07:00
Carson McManus
4574e18d49
inventory client events (#66)
* finish packet definition for ClickContainer

* add CloseScreen client event

* add DropItem client event

* add SetSlotCreative client event

* implement ClientEvent::CloseScreen

* ClientEvent::DropItem

* implement ClientEvent::SetSlotCreative

* cargo fmt

* add inventory_piano example to demo inventory slot click events

* lints

* implement ClickContainer event

* inventory_piano: deduplicate note playing logic

* add DropItemStack client event

* implement ClientEvent::DropItemStack

* adjust logging

* tweak inventory_piano example, send text to chat instead of stdout

* fix lint

* move Slot outside of protocol module

* avoid cloning slot in ClickContainer packet handler

* fix inventory_piano example
2022-09-19 11:29:41 -07:00
Ryan
2f2bc91535 Fix error in docs 2022-09-18 18:38:12 -07:00
Ryan
d459df8b2c Fix formatting 2022-09-17 23:37:11 -07:00
Ryan
cab1337716 Add Giant to entity_raycast example 2022-09-17 23:30:54 -07:00
Ryan
5bdac7fbb0 Remove unnecessary prefix from Poses 2022-09-17 23:25:07 -07:00
Ryan Johnson
9ec1df1978
Entity Hitbox Improvements (#70)
Solves #45. With help from @guac420
2022-09-17 23:14:48 -07:00
Ryan
dcd4a2b5ed Update resource pack link and add SHA-1 hash 2022-09-17 19:40:26 -07:00
James P
e6f01e5e4d
Custom resource packs (#68)
Implements custom resource pack support.

Adds a `Client` method to set resource pack, and a `ClientEvent` for listening to resource pack status updates from clients.
2022-09-17 19:32:40 -07:00
Ryan
02b4b49c10 Remove packets.json notice 2022-09-16 22:48:22 -07:00
EmperialDev
419d317736
Migrating the packets to wiki.vg (#62)
Addresses #56. Migrating all the packet names to wiki.vg's instead of fabric's.
2022-09-16 21:29:48 -07:00
Ryan Johnson
0a75f103aa
Packet filtering (#67)
* Add `PacketName`

* Fix inefficiency in codec.rs

* Add regex argument to packet_inspector

* Reorder imports

* Make the regex arg optional

* Update README
2022-09-16 05:31:37 -07:00
Ryan Johnson
7cd3b6cd2d
Add inventory packets (#57)
Adds the inventory packets so we can use them with `packet_inspector`.
2022-09-14 14:18:04 -07:00
Carson McManus
f165b55c7b
add building example (#49)
This adds a new example to demonstrate how to implement block breaking/placing.
2022-09-13 18:30:45 -07:00
Ryan
7878793629 Explain event validation 2022-09-12 21:53:07 -07:00
Ryan
51cb3bd277 Fix formatting 2022-09-12 20:32:11 -07:00
Ryan
dc64f06cac Clarify chunk space/world space 2022-09-12 20:20:58 -07:00
Nolan Rosen
adc927d319
Cleaner fix to #10 (#52) 2022-09-12 17:14:37 -07:00
Ryan
65dc561868 Document and rename default_client_event to handle_event_default. 2022-09-11 21:59:05 -07:00