mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-31 08:22:33 +00:00
* 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.
115 lines
2.5 KiB
TOML
115 lines
2.5 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = [
|
|
"pumpkin-api-macros",
|
|
"pumpkin-config",
|
|
"pumpkin-util",
|
|
"pumpkin-inventory",
|
|
"pumpkin-macros/",
|
|
"pumpkin-protocol/",
|
|
"pumpkin-world",
|
|
"pumpkin/",
|
|
"pumpkin-data",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.1.0-dev+1.21.11"
|
|
edition = "2024"
|
|
rust-version = "1.89"
|
|
|
|
[profile.release]
|
|
lto = true
|
|
strip = "debuginfo"
|
|
codegen-units = 1
|
|
|
|
[profile.bench]
|
|
debug = true
|
|
|
|
[profile.profiling]
|
|
inherits = "release"
|
|
debug = true
|
|
strip = false
|
|
|
|
[workspace.dependencies]
|
|
log = "0.4"
|
|
tokio = { version = "1.49", default-features = false }
|
|
syn = { version = "2.0", default-features = false, features=["printing"] }
|
|
|
|
|
|
thiserror = "2.0"
|
|
|
|
bytes = "1.11"
|
|
|
|
# Concurrency/Parallelism and Synchronization
|
|
futures = { version = "0.3", default-features = false, features = ["executor"] }
|
|
rayon = "1.11"
|
|
crossbeam = "0.8"
|
|
|
|
uuid = { version = "1.20", features = ["serde", "v3", "v4"] }
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
|
|
tempfile = { version = "3.24.0", default-features = false }
|
|
proc-macro-error2 = "2"
|
|
aes = "0.8"
|
|
async-compression = "0.4.37"
|
|
base64 = "0.22.1"
|
|
bitflags = "2.10.0"
|
|
cesu8 = "1.1"
|
|
cfb8 = "0.8"
|
|
colored = "3.1"
|
|
console-subscriber = { version = "0.5.0", default-features = false }
|
|
crc-fast = "1.10.0"
|
|
criterion = { version = "0.8", default-features = false }
|
|
crossbeam-utils = "0.8.21"
|
|
crossfire = "2.1.10"
|
|
dashmap = "6.1"
|
|
ecdsa = "0.16.9"
|
|
enum_dispatch = "0.3.13"
|
|
env_logger = "0.11.8"
|
|
flate2 = "1.1.8"
|
|
heck = "0.5"
|
|
hmac = "=0.13.0-rc.3"
|
|
indexmap = "2.13"
|
|
itertools = "0.14.0"
|
|
libloading = "0.9"
|
|
lru = "0.16.3"
|
|
lz4-java-wrc = "0.2.0"
|
|
md5 = "0.8"
|
|
num-bigint = "0.4"
|
|
num-derive = "0.4"
|
|
num-traits = "0.2"
|
|
num_cpus = "1.17.0"
|
|
p384 = "0.13.1"
|
|
phf = "0.13.1"
|
|
pkcs8 = "=0.11.0-rc.9"
|
|
proc-macro2 = "1.0"
|
|
pumpkin-config = { path = "pumpkin-config" }
|
|
pumpkin-data = { path = "pumpkin-data" }
|
|
pumpkin-inventory = { path = "pumpkin-inventory" }
|
|
pumpkin-macros = { path = "pumpkin-macros" }
|
|
pumpkin-nbt = { path = "pumpkin-nbt" }
|
|
pumpkin-protocol = { path = "pumpkin-protocol" }
|
|
pumpkin-util = { path = "pumpkin-util" }
|
|
pumpkin-world = { path = "pumpkin-world" }
|
|
quote = "1.0"
|
|
rand = { git = "https://github.com/rust-random/rand"}
|
|
rsa = "=0.10.0-rc.13"
|
|
rustc-hash = "2.1.1"
|
|
rustyline = "17.0.2"
|
|
ruzstd = "0.8.2"
|
|
serde_json5 = "0.2.1"
|
|
sha1 = "=0.11.0-rc.4"
|
|
sha2 = "=0.11.0-rc.4"
|
|
signature = "2.2.0"
|
|
simplelog = "0.12.2"
|
|
slotmap = "1.1"
|
|
take_mut = "0.2.2"
|
|
temp-dir = "0.1.16"
|
|
thread_local = "1.1.9"
|
|
time = "0.3"
|
|
arc-swap = "1.7"
|
|
tokio-util = "0.7.18"
|
|
toml = "0.9"
|
|
ureq = "3.1.4"
|