@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
88## [ Unreleased]
99
10+ ### Added
11+
12+ - Added ` /restart ` command (console-only) that gracefully restarts the server without manually relaunching.
13+ - Added support for custom Python events with optional cancellation.
14+ - Added ` ActorType ` to the registry API.
15+ - Added ` BlockData.translation_key ` for retrieving the translation key of a block.
16+ - Added ` WritableBookMeta ` , ` BookMeta ` , and ` CrossbowMeta ` item meta types.
17+ - Added binary NBT serialization (` dump ` /` load ` ) with support for multiple formats.
18+ - Added unified ` Object.as<T>() ` /` is<T>() ` casting API, replacing the per-type ` asPlayer() ` , ` asMob() ` , etc. methods.
19+
20+ ### Changed
21+
22+ - ** BREAKING** : Replaced ` Dimension::Type ` enum with ` DimensionId ` , a namespaced identifier that supports custom
23+ dimensions. Use ` Dimension.OVERWORLD ` , ` Dimension.NETHER ` , ` Dimension.THE_END ` constants or look up by identifier.
24+ ` Dimension.name ` has been replaced by ` Dimension.id ` .
25+ - ** BREAKING** : Replaced ` asPlayer() ` , ` asMob() ` , ` asConsole() ` , etc. with ` as<T>() ` /` is<T>() ` on all ` CommandSender `
26+ and ` Actor ` subtypes. In Python, use ` isinstance() ` as before.
27+ - ** BREAKING** : ` Player ` no longer inherits from ` OfflinePlayer ` .
28+ - ** BREAKING** : ` BlockPlaceEvent.get_block() ` now returns the placed block instead of the replaced block.
29+ ` getBlockPlacedState ` /` getBlockReplaced ` renamed to ` getBlockPlaced ` /` getBlockReplacedState ` to match Bukkit.
30+
31+
32+ ### Fixed
33+
34+ - Fixed type annotations for ` Plugin ` and ` event_handler ` .
35+ - Fixed ` Player.sendMessage ` accepting empty messages.
36+ - Fixed command argument parsing dropping optional message parameters with empty tokens.
37+ - Fixed plugin manager destruction order causing access violations on shutdown.
38+
1039## [ 0.11.3] - 2026-04-02
1140
1241### Added
0 commit comments