mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-31 08:22:33 +00:00
830284c0913eba076a8e5855128f4e03fef40e14
* fix: nether portals * fix: add world border checks and match vanilla portal behavior * feat: add region-based POI storage for nether portal linking Implemented Point of Interest system for fast portal lookups: - region-based NBT storage matching vanilla format - sections keyed by Y coordinate within per-chunk data - auto-registration on portal creation/destruction - used by portal search to avoid scanning all blocks Note: this POI implementation covers nether portals only. The full POI system still needs significant work for: - villager job sites - beds, bells, beehives - ticket/occupation system - auto-scanning chunks for POI blocks - distance tracker for pathfinding Vanilla POI reference: net/minecraft/world/poi/ * feat: add entity position preservation and collision avoidance for portals - preserve entity position relative to portal when teleporting - add collision avoidance to find safe spawn positions - add source portal tracking for accurate exit position calculation - fix clippy pedantic warnings across portal and border code * feat: add yaw rotation and vehicle teleportation for portals - rotate entity yaw 90° when portal axis changes between dimensions - prevent passengers from teleporting independently (wait for vehicle) - teleport all passengers along with vehicle through portals * fix: handle nested passengers recursively for portal teleportation passengers of passengers (e.g., player riding a pig riding a minecart) are now teleported correctly through portals * style: apply cargo fmt and allow too_many_lines for portal search find_safe_location exceeds 100 lines but splitting it would reduce readability - the portal search algorithm flows naturally as one unit * feat: use MCA format for POI storage for vanilla compatibility Change POI storage to vanilla-compatible .mca region format. This allows proper portal linking when importing existing vanilla worlds, as Pumpkin can now read portals registered by vanilla. * fix: remove local cargo config that breaks CI * fix: correct portal direction calculations and dimension chunk loading - fix portal direction to match vanilla: z-axis uses south (not north) - fix perpendicular direction to match vanilla's rotateyc1ockwise() - fix fallback clearing dimensions to match vanilla (3x2x4 blocks) - store world reference in chunkmanager, updated on dimension change - use chunkmanager's world for chunk loading instead of entity.world this fixes players spawning inside blocks and seeing wrong terrain (overworld blocks in nether) after portal teleportation. * fix: portal neighbor update logic and remove_player return value - fix impossible condition in portal neighbor update (was always false) - fix remove_player to return the removed player instead of none * fix: update entity.world to arcswap for dimension teleportation entity.world was an immutable arc<world> that was never updated after dimension teleportation. when a player teleported to the nether, chunkmanager.world was updated but entity.world still pointed to the overworld. this caused tick_block_collisions() to read blocks from the wrong dimension, preventing return portal detection. changed entity.world from arc<world> to arcswap<world> to allow atomic updates when changing dimensions. added set_world() method and updated teleport_world() to call it after dimension changes. * fix: reset chunk batch state on dimension change when changing dimensions, the chunk batch state was not being reset. this caused slow chunk loading if the player was in a throttled state before teleporting, as the server would wait for acknowledgments for chunks that no longer exist in the new dimension. now resets batches_sent_since_ack to Initial in change_world() so chunks can be sent immediately after dimension change.
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.
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
Features
- Configuration (toml)
- Server Status/Ping
- Networking
- Encryption
- Packet Compression
- World
- World Joining
- Player Tab-list
- Scoreboard
- World Loading
- World Time
- World Borders
- World Saving
- Lighting
- Entity Spawning
- Item drops (W.I.P)
- Bossbar
- Chunk Loading (Vanilla, Linear)
- Chunk Generation
- Chunk Saving (Vanilla, Linear)
- Biomes
- Redstone (W.I.P)
- Liquid Physics
- Vegetation
- Structure Generation
- 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 (W.I.P)
- Boss
- Villagers
- Mobs Inventory
- Entity Saving
- Server
- Plugins (W.I.P)
- Query
- RCON
- Inventories
- Particles
- Chat
- Commands (W.I.P)
- Permissions
- Translations
- Proxy
- Bungeecord
- Velocity
Check out our Github Project to see current progress.
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
Empowering everyone to host fast and efficient Minecraft servers.
dockergame-servergamedevminecraftminecraft-bedrock-editionminecraft-protocolminecraft-servernetworkingrustserver
Readme
GPL-3.0
253 MiB
Languages
Rust
100%
