* fix: replace oldest log file when log filename id has reached maximum
* fix formatting
* track oldest log file in single pass
* warn when overwriting existing log
* increase MAX_ATTEMPTS to 1000
* check every hitbox onplace block, not just player
* bounding_box
* refactor: use get_all_at_box for placement collision
* fix: use blocking entity rules for block placement
* entity_blocks_block_placement for player
* fix setting for flat world
* fix setting for flat world
* todo
* entity teleport
* yaw and pitch apply
---------
Co-authored-by: chocodev11 <chocodev11@users.noreply.github.com>
* feat: implement firework data components
* Fix: Cargo Fmt
* Fix: Update color to i32 and add color limits
* Fix: Check firework flight time is within NBT limit
* fix: cargo fmt
* fix: clippy
* feat: add cancellable PlayerInteractEntityEvent for plugin API
* feat: add cancellable PlayerInteractUnknownEntityEvent for plugin API
* feat: fire cancellable BlockPlaceEvent in block placement flow
* fix: add backticks to InteractAt in doc comments for clippy
* fix: improve level.dat deserialization for imported worlds
worlds from different minecraft versions could fail to load due to
strict field requirements and missing nbt type support. this makes
level.dat fields default to vanilla values when missing, handles
both string and compound generator settings, and fixes nbttag
deserialization for lists containing compound elements.
* style: run cargo fmt on world_info module
* fix(chunk): resend replaced chunk data at same position
* fix(clippy): simplify chunk resend dedupe check
* fix(chunk): dedupe by weak chunk identity
Track the block position of open container screens on the player and
close them when the underlying block is broken or exploded, preventing
ghost UIs and item duplication.
Closes#1512
* check every hitbox onplace block, not just player
* bounding_box
* refactor: use get_all_at_box for placement collision
* fix: use blocking entity rules for block placement
* entity_blocks_block_placement for player
---------
Co-authored-by: chocodev11 <chocodev11@users.noreply.github.com>
* feat: add redstone power support for fence gates
Fence gates now open/close in response to redstone power changes,
matching vanilla behavior. Also adds wood-type-specific sounds for
both manual and redstone-triggered toggling.
* fix: skip redundant set_block_state in fence gate neighbor update
Early return when redstone power state hasn't changed, avoiding
unnecessary world writes on every neighbor update.
* feat: make pumpkin colorful
* chore: use .to_string() instead of format!()
* chore: no from_legacy_string
* chore: make clippy happy
* chore: move some startup logs to a separate function
* fix: preserve protocol ordering for sound event IDs in codegen
The Sound enum variants were sorted alphabetically, causing every
sound ID sent via the protocol to mismatch the client's expected
registration order. Only sort the LOOKUP table for binary search;
keep enum variants in the original sounds.json order.
Closes#1532
* chore: regenerate sound.rs with protocol-correct ordering
* feat: replace hardcoded 'world' with actual dimension names
- Use dimension.minecraft_name in player removal logs
- Query protocol now returns actual world name (minecraft:overworld, etc.)
- Falls back to 'world' if no worlds are loaded
* fix: use actual world folder name instead of dimension name
* refactor: extract world name extraction to helper method
- Extract sample list building to build_sample_list() helper method
- Add guard to prevent double-counting in players.online
- Only increment online count if player is not already in samples
- Only decrement online count if player was actually in samples
- Prevents online count drift when add_player called multiple times
- Clamp sleep_percentage to 0..=100 range to handle invalid values
- Ensure at least 1 player must be sleeping (even when percentage is 0)
- Prevents night skip when nobody is sleeping with 0% setting
- Calculate required sleeping players based on configured percentage
- Use game_rules.players_sleeping_percentage from level info
- Ceil the result to ensure minimum required players
- Return false early if no players online
- Add `Sample` import from pumpkin_protocol for player sample representation
- Add `Uuid` import for player identification
- Add `MAX_SAMPLE_PLAYERS` constant set to 12 to limit sample size
- Add `player_samples` field to `CachedStatus` struct to track online players
- Implement player sample collection in `add_player` method with deduplication
- Implement player sample removal in `remove_player` method
- Update status response JSON with player samples on each change
- Replace TODO comments with functional implementation for player tracking
- Ensures server status response includes up to 12 player samples for clients