BitForge c70b17d058 fix(entity): persist dropped items across reconnect (#1987)
* fix(entity): prevent duplicate items and drop animation replay on reconnect

When a player reconnects, spawn_world_entity_chunks unconditionally
created new entity instances from chunk NBT, even if those entities
already existed in the world (e.g. another player still tracking them).
This caused three bugs:

1. Drop animation replay: read_nbt_non_mut restores the original drop
   velocity from NBT, so the client renders items as if they were just
   dropped again.
2. Uncollectable ghost items: duplicate entities with different
   entity_ids but the same UUID desync client and server state, making
   items impossible to pick up.
3. Dupe glitch: the same chunk NBT entry spawns a second entity on
   every reconnect, duplicating items in the world.

Fix by:
- Checking world.entities for existing entities with the same UUID
  before creating new ones; if found, only send spawn packet for the
  existing entity to the reconnecting player.
- Clearing velocity to zero after NBT restore so the spawn packet does
  not carry stale drop velocity.
- Adding a UUID dedup guard in add_entity_silent as a second line of
  defense.

* fix(item): restore NBTStorage for ItemEntity to fix ghost items after reconnect

Re-implement write_nbt/read_nbt_non_mut to persist and restore:
- Item compound (via write_item_stack/read_item_stack)
- Age, PickupDelay, Health

Add new_for_restore() constructor without random velocity.

Update EntityType::ITEM dispatch to use new_for_restore() instead of
ItemEntity::new() with AIR.

* fix(clippy): resolve doc-markdown and collapsible-if in ItemEntity

---------

Co-authored-by: Missing_Love <42416195+Q2297045667@users.noreply.github.com>
2026-06-20 20:33:03 +02:00
2026-06-20 20:07:31 +02:00
2026-06-20 20:07:31 +02:00
2026-05-15 18:24:28 +02:00
2026-06-20 20:07:31 +02:00
2026-06-12 20:55:29 +02:00
2026-06-20 20:07:31 +02:00
2026-06-20 20:15:13 +02:00
2026-06-20 20:07:31 +02:00
2026-06-20 20:07:31 +02:00
2025-03-29 13:25:37 +01:00
2025-05-10 12:46:42 +02:00
2026-05-16 12:41:29 +02:00
2026-06-19 18:52:50 +02:00
2026-06-19 18:52:50 +02:00
2025-08-11 20:45:55 +02:00
2026-06-09 16:49:32 +02:00
2026-06-09 16:49:32 +02:00
2024-12-04 11:37:41 +01:00

Pumpkin

CI Discord License: GPL

Pumpkin is a Minecraft server built entirely in Rust, offering a fast, efficient, and customizable experience. It prioritizes performance and player enjoyment while adhering to the core mechanics of the game.

chunk loading

Goals

  • Performance: Leveraging multi-threading for maximum speed and efficiency.
  • Compatibility: Supports the latest Java & Bedrock Minecraft server version while adhering to Vanilla game mechanics.
  • Security: Prioritizes security by preventing known security exploits.
  • Flexibility: Highly configurable, with the ability to disable unnecessary features.
  • Extensibility: Provides a foundation for plugin development.

Important

Pumpkin is currently under heavy development.

See what needs to be done before the 1.0.0 Release

Features

  • Configuration (toml)
  • Tracking: Protocol
    • Server Status/Ping
    • Encryption
    • Packet Compression
    • Java/Bedrock
    • ...
  • Tracking: World
    • Player Tab-list
    • Scoreboard
    • World Loading
    • World Time
    • World Borders
    • World Saving
    • Lighting
    • Entity Spawning
    • Bossbar
    • Chunk Loading (Vanilla, Linear, Pump)
    • Chunk Generation
    • Chunk Saving (Vanilla, Linear, Pump)
    • Redstone
    • Liquid Physics
    • ...
  • Tracking: Player
    • Skins
    • Teleport
    • Movement
    • Animation
    • Inventory
    • Combat
    • Experience
    • Hunger
    • Off Hand
    • Advancements
    • Eating
    • ...
  • Entities
    • Non-Living (Minecart, Eggs...) (W.I.P)
    • Entity Effects
    • Players
    • Mobs (W.I.P)
    • Animals (W.I.P)
    • Entity AI
    • Boss
    • Villagers
    • Entity Saving
  • Server
    • Plugins
    • Query
    • RCON
    • Inventories
    • Particles
    • Chat
    • Commands
    • Permissions
    • Translations
  • Proxy
    • Bungeecord
    • Velocity

How to run

See our Quick Start guide to get Pumpkin running.

Contributions

Contributions are welcome! See CONTRIBUTING.md

Docs

Pumpkin's documentation can be found at https://pumpkinmc.org/

Communication

Consider joining our Discord server to stay up-to-date on events, updates, and connect with other members.

Funding

If you want to fund me and help the project, check out my GitHub sponsors.

Description
Languages
Rust 100%