* feat: implement boat placement
- add boat item handler for all boat/raft types
- raycast with fluid handling to place on water or blocks
- filter entities with can_hit predicate (vanilla parity)
- check space is empty before spawning
- decrement item unless creative mode
* feat: add boat entity with damage handling
- create BoatEntity struct implementing EntityBase
- implement can_hit() and is_collidable() for boats
- implement damage handling that drops boat item on destroy
- update boat item to spawn BoatEntity instead of generic Entity
* fix: boat damage wobble and attack sounds match vanilla
Boats now accumulate damage with wobble animation that decays over time.
Attack sounds play for all hittable entities, not just living entities.
* feat: add boat riding and vehicle movement packets
* feat: complete boat implementation matching vanilla
- add underwater check (60 ticks) and max 2 passengers limit
- add paddle animation metadata and handler
- implement proper land dismount with offset calculation
- add riding_cooldown field to entity
* fix: clippy warnings for boat implementation
* refactor: use loot tables for boat item drops
* fix: collapse nested if to satisfy clippy
* style: fix cargo fmt formatting for collapsible if
* fix: boat dismount places player correctly beside vehicle
- implement vanilla's dismount position calculation with
getDismountHeight, canDismountInBlock, and pose fallback
(standing → crouching → swimming)
- fix packet ordering race: use enqueue_packet for teleport so it
arrives after CSetPassengers (send_packet_now bypassed the queue)
- pre-set awaiting_teleport before CSetPassengers to block stale
movement packets during async dismount calculation
- send CSetPassengers directly to dismounting player, broadcast to
others (matching vanilla's targeted packet behavior)
- use DELTA|ROT position flags for teleport (vanilla preserves
current look direction with relative rotation)
- add riding cooldown (60 ticks) to prevent immediate re-mount
- reset sneaking state after player dismount
- fix water detection to check specifically for water/flowing_water
fluids (Fluid::from_state_id returns EMPTY for air blocks)
- revert broken loot table refactor for boat item drops (boats use
hardcoded entity-to-item mapping, not loot tables)
- add get_dismount_height helper on World matching vanilla's
BlockView.getDismountHeight()
- ignore movement packets while awaiting teleport confirmation in
handle_position and handle_position_rotation
* style: fix cargo fmt formatting
* refactor: use loot tables for boat item drops
add loot table entries to entities.json for all 20 boat/raft types
and use the existing loot table system instead of hardcoded mapping.
* fix: resolve rebase conflicts and clippy warnings
* fix: regenerate codegen to include boat loot tables
Its works, but block state ids are currently not mapped, meaning that when using the current default world gen the client mostly will disconnect due to a not found block state id, vanilla version compatible worlds should work
- fixed nether again, not the dead lock or whatever it is but the server crash
- further replace Notify with CancellationToken
- fixed chunk loading on inital spawn
- more stronghold work
* switch to btreemap to comply with lint
* amplifier i32 -> u8
* switch allow to expect lint
* remove many many unnecessary clippy lints
* dont use expect inside quotes
* fix: Remove liftimes from CStatusResponse and CPlayerPosition
* fix: Add lifetimes to CachedBranding and fix tests
* fix: Remove lifetimes from CLoginDisconnect packet, data is dropped immediately after the packet is constructed
* fix: Apply formatting to packet_encoder.rs
---------
Co-authored-by: Alexander Medvedev <lilalexmed@proton.me>