* 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
I did not update density functions because i'm too lazy to refactor a bunch of things because Mojang decided to remove "initial_density_without_jaggedness", but i will in the future
* update to 1.21.5
* maybe made something better maybe made something worse
:c does still not work
* some fixes
* fix chunk packet
finally, this took way too much of my life time
* port text component
* fix tests
recipes are broken but we currently don't use them anyway
Also rewrite how we handle tags. Now we can use tags everywhere we want!. I also decided to make the json assets pretty printed which is so much easier to debug, The decision was made because of the reason that we are moving to compile time assets, so pretty printing does not affect performance