* initial commit
# Conflicts:
# Cargo.toml
# Conflicts:
# Cargo.toml
* implemented more `DataResult` methods
* finished data result struct
* fixed clippy errors
* implemented `map_like` and more `dynamic_ops` methods
* finished most other `DynamicOps` methods
* Fixed doc in get_bytes
* added encoder and decoder files
* fixed some stuff and added primitive codecs
* added some primitive codecs (has errors for now)
* changed the "stream" ops methods
* reworked types of the coders and codecs, added list codecs
* added JSON ops
* fixed list codecs, added some doc test examples in `JsonOps`
* added lazy codecs
* added map encoders, decoders and struct builders
* actually added mapdecoder
* added encoder and decoder transformations
* fixed encoder and decoder transformations and added transformation functions and range codecs
* added field encoders and decoders and separated range codecs
* added field encoders and decoders and separated range codecs
* added BaseMapCodec and SimpleMapCodec
* added struct codecs and moved tests
* added `NbtOps`, unsigned number codec types, range codec tests, a struct test, detailed `Codec` documentation
* added optional field map codecs, the validator function and reworked struct builder functions
* added unbounded map and struct codec tests and reworked validated codecs
* did some visibility refactoring
* fixed some stuff and renamed unsigned number codecs
* fixed formatting
* fixed docs to reflect changes on renaming unsigned number codecs
* fixed validated test
* fixed doctest
* moved base_map_codec and fixed docs about codecs
* fixed some mistakes in the code
* fixed some more mistakes in the code and converted some `DataResult::error` calls to `DataResult::partial_error`
* fixed formatting
* fixed some incorrect docs
* removed `OnceLock`s in `MapCodec`s so they can be used more easily
* fixed transformer codec descriptions, added more `NbtOps` tests and fixed some `NbtOps` list methods
* fixed doctest
* added a method to allow creating a field using a `MapCodec` reference
* bifurcated `MapCodecCodec`s as well
* removed imports only for documentation and replaced them with intra-doc links
* added additional docs to `optional_field_with_default` and `lenient_optional_field_with_default` Codec methods for additional details on encoding
* renamed crate to `pumpkin-codecs` so that data fixing can be placed somewhere else not frequently used
* fixed invalid nbt tag for test
* reverted wrapping the tags for heterogeneous elements
* fixed a few more issues
* initial commit
# Conflicts:
# Cargo.toml
* added `NbtOps`, unsigned number codec types, range codec tests, a struct test, detailed `Codec` documentation
* renamed crate to `pumpkin-codecs` so that data fixing can be placed somewhere else not frequently used
* added either codecs and either map codecs
* added a test and extra either methods
* added extra assertion
* removed this crate's `either` module in favor of the `either` crate
* fixed rebase
* fixed Cargo.lock
* removed old folder
* removed `DataResult` change
* initial commit
# Conflicts:
# Cargo.toml
* implemented more `DataResult` methods
* finished data result struct
* fixed clippy errors
* implemented `map_like` and more `dynamic_ops` methods
* finished most other `DynamicOps` methods
* Fixed doc in get_bytes
* added encoder and decoder files
* fixed some stuff and added primitive codecs
* added some primitive codecs (has errors for now)
* changed the "stream" ops methods
* reworked types of the coders and codecs, added list codecs
* added JSON ops
* fixed list codecs, added some doc test examples in `JsonOps`
* added lazy codecs
* added map encoders, decoders and struct builders
* actually added mapdecoder
* added encoder and decoder transformations
* fixed encoder and decoder transformations and added transformation functions and range codecs
* added field encoders and decoders and separated range codecs
* added field encoders and decoders and separated range codecs
* added BaseMapCodec and SimpleMapCodec
* added struct codecs and moved tests
* added `NbtOps`, unsigned number codec types, range codec tests, a struct test, detailed `Codec` documentation
* added optional field map codecs, the validator function and reworked struct builder functions
* added unbounded map and struct codec tests and reworked validated codecs
* did some visibility refactoring
* fixed some stuff and renamed unsigned number codecs
* fixed formatting
* fixed docs to reflect changes on renaming unsigned number codecs
* fixed validated test
* fixed doctest
* moved base_map_codec and fixed docs about codecs
* fixed some mistakes in the code
* fixed some more mistakes in the code and converted some `DataResult::error` calls to `DataResult::partial_error`
* fixed formatting
* fixed some incorrect docs
* removed `OnceLock`s in `MapCodec`s so they can be used more easily
* fixed transformer codec descriptions, added more `NbtOps` tests and fixed some `NbtOps` list methods
* fixed doctest
* added a fourth specific `NbtOps` test for byte buffers (`ByteArray`s in NBT)
* fixed grammar mistake
* log messages for discarded keys in `create_map`
* use the `tracing` crate for logging
* added a method to allow creating a field using a `MapCodec` reference
* bifurcated `MapCodecCodec`s as well
* removed imports only for documentation and replaced them with intra-doc links
* added additional docs to `optional_field_with_default` and `lenient_optional_field_with_default` Codec methods for additional details on encoding
* renamed crate to `pumpkin-codecs` so that data fixing can be placed somewhere else not frequently used
* fixed some more errors and reworked `nbt_ops`'s `ListCollector` to be like 1.21.11, also allows &str in `DataResult`'s creation methods
* fixed invalid nbt tag for test
* reverted wrapping the tags for heterogeneous elements
* renamed function parameter in `DataResult::apply_2`
* removed unnecessary comment
* fixed a few more issues
* fixed formatting
* fixed another mistake for `DataResult::add_message`
* renamed `DataResult` factory methods to be more idiomatic and removed unnecessary `dyn` method
* removed unnecessary `clone()`
* updated Cargo.lock
* feat: wasm plugin api base
* fix: make metadata macro work
* chore: fix clippy lints
* Implement guest registering of events
* chore: remove hardcoded v0.1.0 dep in wasm_host
* feat: add events to wasm
* feat: add caching of components
* fix: clippy lints
* chore: update Cargo.lock
* fix: add feature flag for link section
* feat: add base for command wit definitions
* feat: implement arg variants for command wit interface
* feat: add commented out command-tree arg variant
* feat: add wit definitions for text-component and command tree
Introduces the text interface with a builder-pattern resource,
argument-type variant, command-node resource, and register-command
on context. Migrates event and command-sender to use the new
text-component resource.
* feat: add stubs for wasm host
* chore: update wasmtime to v42
* feat: implement three methods of wit textcomponent
* Add consume function
* feat: implement all text-component host methods
Replace todo!() stubs with working implementations for all
HostTextComponent trait methods: style setters, click events,
hover events, add_text, get_text, and encode.
* feat: allow events to be modified
* feat: add some of base for commands
* chore: fix spelling mistake
* chore: remove unused dep
* feat: implement all argument-type to consumer mappings
* Add command exports
* log plugin load errors
* Some commands work
* Some more Commands work
* Update how commands are registered
* Implement locale
* Use handler id with require
* chore: fix some warnings
* Add PlayerLeaveEvent
* chore: fix all clippy warnings
* fix: add more descriptive error message
---------
Co-authored-by: Purdze <r.s.sutton@hotmail.co.uk>
Co-authored-by: Alexander Medvedev <lilalexmed@proton.me>
* 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.