Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
0.11.1 - 2026-02-20¶
Added¶
- Added support for BDS version 1.26.1.1.
- Added
ListTag.to_list()andCompoundTag.to_dict()methods (Python) that recursively convert NBT tag trees to native Python data structures (listanddict). - Exported
attribute,effect,nbt, andpotionsubmodules from the top-levelendstonePython package. - Added explicit standard library
#includedirectives across all public C++ API headers for self-contained compilation.
Fixed¶
- Fixed
PlayerMoveEventandPlayerJumpEventnot firing. - Fixed
WeatherChangeEventandThunderChangeEventnot firing. - Fixed
ServerListPingEventnot firing. - Fixed
Enchantmentobjects being unhashable, preventing their use as dictionary keys and in sets. - Fixed a duplicate keyword argument error when loading Python plugins that define a
nameclass attribute. - Fixed several issues that caused the Map API to not work correctly in some occasions. Maps now behave consistently across different platforms.
Changed¶
- BREAKING:
ServerListPingEvent.remote_hostandServerListPingEvent.remote_portproperties have been replaced by a singleServerListPingEvent.addressproperty that returns aSocketAddress.
0.11.0 - 2026-02-13¶
Added¶
- Added support for BDS 1.26.0.
- NBT API: Plugins can now read, create, and manipulate NBT data directly. All 11 standard tag types are supported (
ByteTagthroughCompoundTag), with full Python bindings.CompoundTagworks like a dictionary andListTaglike a list. Tags can be printed in SNBT format for debugging. - ItemStack NBT access: Read and write NBT data on items using
ItemStack.nbt(Python) /ItemStack::getNbt()andItemStack::setNbt()(C++). Useful for inspecting or modifying item data directly. - Enchantment API: All 33 vanilla enchantments are available as named constants. Plugins can check max level, conflicts between enchantments, and whether an enchantment can be applied to a given item. Accessible via the new Registry system.
- Map API: Plugins can now create and customise in-game maps. Draw pixels and images on the map canvas, add map
cursors (24 types including Player, Mansion, Monument, and TrialChambers), control scale and center position, and
listen for
MapInitializeEventwhen a new map is created. - New events:
BlockFromToEvent: fires on liquid flow teleportation. Cancellable.PlayerPortalEvent: fires when a player enters a portal, with access to source and destination locations. Cancellable.PlayerDimensionChangeEvent: fires when a player moves between dimensions (Overworld, Nether, The End).
- New ItemMeta types:
BookMeta: read and write signed book title, author, generation, and pages.WritableBookMeta: manage book-and-quill pages.CrossbowMeta: inspect and modify loaded crossbow projectiles.
- Command system: Commands can now accept entity type arguments with tab completion via the new
entity_typeparameter type. - Dimension API:
Dimension.spawn_actor()creates an entity at a given location.Dimension.drop_item()drops an item on the ground as a collectible entity. - Mob API:
Mob.max_healthis now writable, allowing plugins to change a mob's maximum health. - Interactive console: New console experience with persistent command history across server restarts. Enabled by
default on Windows, disabled on Linux. Use
--interactive/--no-interactiveCLI flags to override, or set theENDSTONE_USE_INTERACTIVE_CONSOLEenvironment variable. - Crash reports: Server crashes now automatically save a report to
crash_reports/with cleaned-up stack traces for easier debugging. endstone.asynciomodule: Run async code from plugins using a background event loop. Callsubmit(coro)to schedule a coroutine and get aFutureback, without blocking the server thread.- Registry system: A unified way to look up game objects (e.g., enchantments) by their identifier. Supports lookup, existence checks, and iteration.
- BossBar: Added
CREATE_FOGflag to control whether a boss bar creates fog effects for players. - Logging: Rotated log files are now gzip-compressed to save disk space.
endstone.metricsmodule: Built-in bStats integration for plugin analytics. Create aMetricsinstance with your plugin and service ID to start reporting. Includes 8 chart types:SimplePie,AdvancedPie,DrilldownPie,SingleLineChart,MultiLineChart,SimpleBarChart,AdvancedBarChart, andCustomChart. Data is submitted asynchronously viaendstone.asyncio.ItemStack.translation_keyproperty for getting an item's localisation key.- Added support for Python 3.14.
Changed¶
- BREAKING:
NamespacedKeyhas been replaced byIdentifier<T>, a type-safe template that parses"namespace:key"strings and defaults to the"minecraft"namespace. C++ plugins must update all references. In Python, identifiers are simply strings. - BREAKING:
Result<T>has been removed. API methods now return values directly and throw exceptions on invalid input viaPreconditionschecks. These exceptions signal programming errors (e.g., passing invalid arguments). Affected areas include health, distance calculations, boss bar progress, colour construction, and scoreboard operations. Python plugins are unaffected. - BREAKING: Dimension argument reordered and made optional in several APIs. Call sites may need updating.
- Health methods (
get_health,set_health,get_max_health,set_max_health) moved fromActortoMob, since only mobs have health. PlayerDeathEventnow extendsActorDeathEventinstead ofPlayerEvent.- Default config file renamed from
endstone.tomltoendstone.default.toml. - Enchantment APIs now use typed
EnchantmentIdconstants instead of raw strings. - Dropped Python 3.9 support (end-of-life). Minimum version is now Python 3.10.
- Crash stack traces now filter out noise (CRT/runtime frames) and show demangled symbol names.
- Suppressed verbose BDS content logs and database auto-compaction messages to reduce log clutter.
Fixed¶
- Fixed log files not reopening properly after rotation, which could cause logs to be written to stale files.
- Fixed Python interpreter not being found reliably in multi-Python environments.
- Fixed a crash on server shutdown caused by C++ destructors running after the Python interpreter was already torn down.
- Fixed plugin loading failing in environments where
pipis not available (such asuv), sincepipis used at runtime to install plugins from file.
0.10.18 - 2025-12-11¶
Fixed¶
- Patched a new vulnerability in BDS where a bad LoginPacket could crash the server (well done mojang, well done).
0.10.17 - 2025-12-11¶
Fixed¶
- Resolved several crashes.
Changed¶
- Verbose content logs are now suppressed.
0.10.16 - 2025-12-11¶
Added¶
- Added support for BDS version 1.21.130.4.
0.10.15 - 2025-11-21¶
Added¶
- Added support for BDS version 1.21.124.2.
0.10.14 - 2025-11-18¶
Added¶
- Enable packet rate limiting by default to prevent packet flooding.
- Enable RakNet's connection frequency limiting.
Fixed¶
- Patched a vulnerability that allows malicious clients to continue sending packets after the connection is closed.
0.10.13 - 2025-11-18¶
Fixed¶
- Resolved a crash that could occur with certain worlds.
0.10.12 - 2025-11-18¶
Added¶
- Added support for BDS version 1.21.123.2.
Fixed¶
- Resolved a memory leak caused by chunks not unloading properly.
- Patched a vulnerability where a crafted LoginPacket with an excessively long certificate chain could crash the server.
- Patched a vulnerability where a malformed InventoryTransactionPacket could freeze the server.
- Fixed a crash related to custom dimensions (LeviStone).
- IP bans are now checked before the server processes player login.
0.10.11 - 2025-11-06¶
Added¶
- Added support for BDS version 1.21.121.1.
Fixed¶
- Resolved a crash that could occur when updating the scoreboard of an entity.
Player::setWalkSpeednow correctly sets the player's walk speed.
Changed¶
PlayerChatEventis now triggered before Script API'sChatSendBeforeEvent.- Verbose database logs (e.g.
Running AutoCompaction...) are now suppressed.
0.10.10 - 2025-11-01¶
Fixed¶
PlayerItemHeldEventis no longer triggered when thefromslot is the same as thetoslot.
0.10.9 - 2025-10-30¶
Fixed¶
- Resolved crashes in the chunk-related API.
- Stack traces are no longer shown when the server fails to start due to a port conflict on Windows.
- Fixed an issue where
CommandSenderWrappercould not capture the output of custom commands. - Fixed an issue in the
/statuscommand where permission checks were not performed. - Fixed a crash that could occur when the Minecraft service was unavailable.
0.10.8 - 2025-10-28¶
Added¶
- Added support for BDS version 1.21.120.4.
0.10.7 - 2025-10-14¶
Added¶
- Added support for BDS version 1.21.113.1.
Fixed¶
- Resolve a crash when joining a server using a grayscale skin with an alpha channel.
- Resolve an issue where item stacks containing blocks could not be given to players.
0.10.6 - 2025-10-02¶
Added¶
- Added support for BDS version 1.21.111.1.
0.10.5 - 2025-09-26¶
Added¶
- Added support for BDS version 1.21.102.1.
- Added
Level::getSeedto retrieve the seed of the current level. - Added the
/seedcommand to display the current level's seed. - Added
PlayerChatEvent::getFormatandPlayerChatEvent::setFormatto customize the message format.
Fixed¶
- Fixed a crash that could occur when a sub-client joined.
- Ensured
Inventory::setItemproperly updates the client. - Item data is now handled correctly during
ItemStackconstruction. ItemStack::setCountnow correctly updates the item count instead of clearing the entire stack.PlayerChatEvent::setMessagenow correctly displays the updated message to the client.
Changed¶
- If a command usage includes a parameter of type
message, it must be the final parameter. No additional parameters are allowed after it. - On Windows, if the automatic loopback exemption fails, a warning will be shown, but the server will no longer stop running.
0.10.4 - 2025-08-10¶
Fixed¶
- Death messages are now correctly displayed on the death screen.
- Resolved a crash that could occur after payload updates in
PacketReceiveEvent. - Resolved a crash when running
/reloadafter updating native plugins.
0.10.3 - 2025-08-06¶
Added¶
- Added support for BDS version 1.21.100.7
0.10.2 - 2025-08-05¶
Added¶
- Added support for game version 1.21.100
Fixed¶
- Fixed an issue where knockback is still applied when
ActorDamageEventis cancelled
0.10.1 - 2025-07-31¶
Fixed¶
- Fixed a crash that occurred when parsing a command with an empty message argument.
- Resolve an issue where an actor could be damaged again in their invulnerability window if the damage value from a
prior
ActorDamageEventhad been lowered.
0.10.0 - 2025-07-30¶
Added¶
- Added support for BDS version 1.21.95.1.
- Added ability to register commands as console-only by setting
consolein thedefaultfield. - Added
ItemStack::getDataandItemStack::setDatamethods for accessing item data values. - Added
LeavesDecayEventby @killcerr in #209 - Added
BlockCookEventby @killcerr in #212 - Added
PlayerItemHeldEventby @killcerr in #213 - Added
PlayerInteractEvent::Actionenum for distinguishing interaction types. - Added
BlockPistonExtendEventandBlockPistonRetractEventfor piston-related events. - Added
PlayerBedEnterEventandPlayerBedLeaveEventfor player sleeping events by @dreamguxiang in #196 - Added
Server::getProtocolVersionto retrieve the supported network protocol version. - Added
PlayerEmoteEvent::setMutedto suppress server broadcasts for player emotes. - Added
PlayerSkinChangeEvent, triggered when a player changes their in-game skin. - Added
Player::getEnderChestto get a player's Ender Chest inventory. - Added
Itementity for dropped items. - Added a new configuration option
commands.logtoendstone.tomlto control whether the server logs when a player executes a command.
Changed¶
PlayerInteractEventnow triggers on right- and left-clicks with both air and blocks.PlayerEmoteEventis now cancellable; cancelling prevents broadcasting to other players.- Player bans and IP bans are now checked before the server sends resource packs to clients.
PlayerPickupItemEvent::getItem()now returns anItementity instead of anItemStack.- BREAKING CHANGE (Python API):
Buttonclass has been moved from theActionFormclass to theendstone.formmodule. - BREAKING CHANGE (Python API):
PlayerJoinEvent,PlayerQuitEventandPlayerDeathEventnow useTranslatablefor messages by default. - Changed VENV_DIR to "$HOME/.virtualenvs/endstone" in
autoinstall.shandstart.shto avoid polluting users' home directory by @GyanPrakash2483 in #226
Fixed¶
PlayerKickEventno longer triggers whenPlayerLoginEventis cancelled.- Input (
stdin) can now be passed down from a parent process when Endstone is running as a subprocess. ActorDamageEventnow respects the invulnerable time after hurt and will be triggered by damage from a potion.- Fixed an error that could occur with
ActionFormwhen a button'sonClickis not set. - Use the correct colour for average TPS in
/statuscommand output by @MisledWater79 in #232 - Fixed a bug where the selector argument got cut short when parsing commands.
- Fixed
Server.nameproperty in Python API by @cenk in #220
0.9.4 - 2025-07-14¶
Added¶
- Added support for BDS version 1.21.94.2.
0.9.3 - 2025-07-04¶
Added¶
- Added support for BDS version 1.21.93.1.
0.9.2 - 2025-06-30¶
Added¶
- Added support for BDS version 1.21.92.1.
- Added
ChunkLoadEventandChunkUnloadEvent, which are called during chunk loading and unloading. - Added
PlayerPickupItemEvent, which is called when a player is about to pick up an item from the ground.
Fixed¶
Chunk::getZ()now returns the correct value.- Fixed a crash when accessing a registry entry multiple times.
Changed¶
ActorRemoveEventis no longer triggered ifActorSpawnEventis cancelled.PlayerTeleportEventis no longer triggered ifPlayerMoveEventorPlayerJumpEventis cancelled.
0.9.1 - 2025-06-19¶
Added¶
- Added support for BDS version 1.21.91.1.
Fixed¶
ItemType::getTranslationKeynow returns the correct translation key.
0.9.0 - 2025-06-17¶
Added¶
- Added support for BDS version 1.21.90.28 (preview).
- Added
PlayerConsumeItemEvent, triggered when a player consumes an item (e.g., food, milk bucket). - Added
PlayerMoveEvent, triggered when a player moves. - Added
PlayerJumpEvent, triggered when a player jumps. - Added the
ItemTypeAPI to retrieve inherent attributes of a known item type, such as max durability. - Added
Server::getPortandServer::getPortV6to retrieve server ports. - Expanded the
InventoryAPI with additional methods.
Changed¶
- BREAKING CHANGE: Renamed various fields in the
Skinclass:Skin::getSkinImage->Skin::getImageSkin::getSkinId->Skin::getId
- BREAKING CHANGE:
ItemStack::getTypenow returnsItemTypeinstead ofstd::string. You can still compare anItemTypewith a string. - BREAKING CHANGE:
PacketSendEventandPacketReceiveEventnow fire for both pre-login and post-login packets. Ensure null safety when accessing the player object, as it may benullduring pre-login.
0.8.2 - 2025-06-07¶
Added¶
- Added support for BDS version 1.21.84.1
Fixed¶
- Fixed an issue when parsing arguments in custom commands (#190)
- Ensure only certain server files are overwritten during update (#185)
0.8.1 - 2025-05-20¶
Added¶
- Added support for BDS version 1.21.82.1
Fixed¶
- Resolve compatibility issues with custom commands registered via the beta Script API (
init.customCommandRegistry.registerCommand). - Resolve a compatibility issue with LegacyScriptEngine when used in LeviStone, a downstream project.
- Fix #150 by allowing explicit permission grants for non-OP players to execute OP commands.
ActorDamageEventwill no longer fire if thedamage_sensordetermines that no damage should be dealt.BlockBreakEventwill no longer fire when a player uses an item that's not supposed to break blocks in Creative mode.
0.8.0 - 2025-05-11¶
Added¶
- Added support for BDS version 1.21.80.3
- Introduced a new Registry API for accessing the built-in definitions (e.g., all available enchantments via
Server::getEnchantmentRegistry) - Added ability to edit item enchantments via the
ItemMetaAPI - Added ability to get and set an item's repair cost and mark it as unbreakable via the
ItemMetaAPI
Fixed¶
- C++ plugins can now register event handlers for
PlayerDeathEvent
Changed¶
- Simplified
endstone::Resultfor improved error handling
0.7.3 – 2025-05-06¶
Added¶
- Added support for Minecraft v1.21.80.
- Added divider and header for
ActionForm.
Fixed¶
- Ensure SetLocalPlayerAsInitializedPacket is handled only once when a player joins (#171).
- Death message is now correctly localised on the client side.
- Python interpreter now launches correctly in multiprocessing scenarios.
0.7.2 – 2025-03-29¶
Added¶
- Added support for BDS version 1.21.71.01.
- Added
getDamageandsetDamagetoItemMetafor handling item durability. - Added
getRuntimeIdtoBlockDatato retrieve the runtime ID of a block permutation (also known as the network hash ID).
Fixed¶
- Fixed an issue where outgoing packet statistics were not written to
packet-statistics.txt.
0.7.1 - 2025-03-27¶
Added¶
- Added support for BDS version 1.21.70.04.
- Added new
setPayloadmethod inPacketSendEventandPacketReceiveEventfor editing packet contents. - Introduced a configuration file,
endstone.toml, for Endstone configurations.
Fixed¶
- Resolved a crash caused by sending packets within the
PacketSendEventhandler.
Changed¶
- Updated the behavior of server pack enforcement to match vanilla BDS: clients are not allowed to use custom packs when
texturepack-requiredis set totrueinserver.properties. This behavior can be overridden by settingallow-client-packsinendstone.toml.
0.7.0 - 2025-03-25¶
Added¶
- Added support for Minecraft v1.21.70.
- Introduced the
ServiceAPI, enabling plugins to register services that can be utilized by other plugins. - Implemented dependency resolution for the plugin manager.
- Anonymous enums are now supported in command registration. For example, instead of writing
/home (add|remove)<action: HomeAction>, you can now simply write/home <add|remove>. - Inventory API: Added a basic
ItemMetaAPI, allowing you to get and set the display name and lore of an item. - Inventory API: Introduced various methods to get and set items in armor slots as well as main/off-hand slots.
- Inventory API: Added methods to get and set the selected hotbar slot.
Fixed¶
- Fixed a crash caused by a conflict with the event system of the scripting API.
Changed¶
- BREAKING CHANGE:
DataPacketReceiveEventandDataPacketSendEventhave been renamed toPacketReceiveEventand
PacketSendEvent, respectively. Both events now provide a packet ID and payload instead of adatafield. - BREAKING CHANGE:
Player::sendPacketnow requires a packet ID and payload as arguments instead of aPacketobject.
0.6.2 - 2025-03-09¶
Added¶
- Added support for Minecraft v1.21.62.
- Added
DataPacketReceiveEventandDataPacketSendEventto allow viewing/intercepting low-level packet payloads. - Added
Actor::removeto remove an actor from its associated dimension. - Python API: Added
Dimension.get_highest_block_atto get the top non-air block at a given coordinate.
Fixed¶
- Usages are now displayed correctly as percentages in
/statuscommand output. - Boss bars are now displayed correctly.
- Death messages are no longer sent when the
SHOW_DEATH_MESSAGESgame rule is set to false. - Command feedback is now suppressed when the
SEND_COMMAND_FEEDBACKgame rule is set to false. PlayerJoinEventis now triggered after the client is fully initialized.- Crash reporting now works properly on Linux.
0.6.1 - 2025-02-20¶
Fixed¶
- Resolved a crash caused by
ProxiedCommandSender
0.6.0 – 2025-02-19¶
Added¶
- Added support for Minecraft v1.21.60.
- Added more liquid-related data to the DevTools by @smartcmd in #113.
- Added Sentry for crash reporting.
- Added
Player::playSound,Player::stopSound, andPlayer::stopAllSoundsfor client-side sound playing. - Added
Player::isSneakingandPlayer::setSneakingto toggle the sneaking mode of a player. - Added
Player::isSprintingandPlayer::setSprintingto toggle the sprinting mode of a player. - Added
PlayerGameModeChangeEvent, triggered when a player's game mode changes. This event is cancellable. - Added
PlayerEmoteEvent, triggered when a player sends an emote. - Added
PlayerRespawnEvent, triggered when a player respawns after death. - Added
ActorDamageEvent, triggered when a living entity receives damage. You can cancel this event to stop the damage from being effective. - Added
ActorExplodeEvent, triggered when a mob (e.g. Creeper) explodes. You can cancel this event to stop the explosion. - Added more statistics to the
/statuscommand (e.g., memory usage, chunk status, etc.). - Added damage source to
ActorDeathEventandPlayerDeathEventto retrieve information about the damager. - Added a basic chunk API.
- Added block collision data to the DevTools by @smartcmd in #132.
Fixed¶
- Fixed the logic of finding the Python executable associated with the current interpreter by @killcerr in #114.
- Fixed the logic for parsing the
messagecommand parameter type.
Changed¶
- Python API: Events that are cancellable now inherit from
Cancellable. You can check if an event is cancellable by usingisinstance(event, Cancellable). Dimension::getBlockAtnow returns a pointer to aBlockdirectly instead of aResultwrapper, making the interface more concise. If the requested block is in an unloaded or unpopulated chunk, it returns an empty block.
0.5.7.1 - 2024-12-24¶
Fixed¶
- Fixed an issue where the
event.is_cancelledproperty in the Python binding was not writable. - Prevented player command execution from being printed to the console if the
PlayerCommandEventwas already cancelled by plugins.
0.5.7 - 2024-12-23¶
Added¶
- Added getter and setter for name tags and score tags in the
Actorclass. - Added the
Actor::getTypefunction to retrieve actor types (e.g.,minecraft:pig). - Added
isNameTagAlwaysVisibleandsetNameTagAlwaysVisiblemethods to theActorclass to control the visibility of name tags. - Implemented
/ban-ipand/unban-ipcommands. - Added
Server::getIpBanListfor managing IP bans. - Added setters for fields in
ServerListPingEventby @theaddonn. - Added a new color code (
§v).
Fixed¶
- Prevented a crash caused by killing a player in a form callback, which invalidated the player object.
- Fixed an issue where the player inventory was not updated after calling
clear. - Fixed loading of encrypted resource packs.
- Ensured the correct plugin loader is selected when loading from a file by third-party plugin loaders by @engsr6982.
- Ensured players with matching IP addresses are immediately kicked upon banning.
Changed¶
- Renamed
Server::getPlayerBanListtoServer::getBanList. - Removed deprecated material from DevTools by @smartcmd.
0.5.6 - 2024-12-06¶
Added¶
- Added support for Minecraft v1.21.50 (The Garden Awakens).
- Added
Inventory::getItemandInventory::setItemmethods to manipulate a player's inventory. - Added
Inventory::getContentsmethod to retrieve all items in an inventory. - Added
/banand/unbancommands to add or remove players from the deny list. - Added
/banlist [ips|players]command to list all banned players and/or IPs. - Added
PluginManager::loadPluginto allow third-party plugin loaders to load plugins from single files instead of directories. #98
Fixed¶
- Fixed an issue where
block_palette.nbtwas dumped twice in the DevTools.
Changed¶
- Added support for loading a mixture of folder packs listed in
world_resource_packs.json(the conventional method) and zipped packs in.zipor.mcpackformat placed underresource_packs.
0.5.5 - 2024-10-26¶
Added¶
- Added support for Minecraft v1.21.40 (Bundles of Bravery).
- CommandSender will now be downcast to the correct derived type on the Python side.
- Added the
Objective::isDisplayedmethod to check if an objective is being displayed in any of the scoreboard slots. - Added
Server::getOnlineModeto check if the server is running with authentication enabled. - Added
Actor::getScoreboardTagsto get the list of tags added to the actor. - Added
Actor::addScoreboardTagandActor::removeScoreboardTagto modify the actor's tags. - Added support for loading zipped resource packs. You can now put
.zipand.mcpackresource packs under theresource_packsfolder, and they will be loaded automatically when the server starts. - Added support for encrypted resource packs. You can put the keys in the
.zip.keyor.mcpack.keyformat next to the resource packs. - Added the
ScriptMessageEvent, which will get called when a script message is sent using the/scripteventcommand. - Added
Server::getLanguageto translate a message into a specific locale. - Added
Actor::getHealth,Actor::setHealth, andActor::getMaxHealthfor getting and setting actor health. - Added
CommandSenderWrapperto capture the output of command execution for any command sender. - Added
Player::spawnParticleto send a particle effect that is only visible to the player.
Changed¶
- Error messages from DevTools, when OpenGL is not available, are now suppressed.
- The return type of several methods has been changed to
endstone::Resultto include error messages, which will automatically throw exceptions with the same messages on the Python side.
Fixed¶
- Fixed a crash that occurred while handling server ping requests (#60).
0.5.4.1 - 2023-09-19¶
Fixed¶
- Fixed a crash that could occur when the player uses emotes.
0.5.4 - 2024-09-19¶
Added¶
- Added support for Minecraft v1.21.30.
- Added support for Python 3.13.
- Added biome data to the DevTools by @CoolLoong.
Changed¶
- BREAKING CHANGE:
Player::performCommandnow executes the command as a Player to resolve #53. This means the command execution will now depend on the player's permissions as operator permissions are no longer granted. If you still want to have the player perform a command with elevated permissions, consider usingServer::dispatchCommandto executeexecute as {player_name} run {command}.
Fixed¶
Actor::isOnGround,Actor::isInWater, andActor::isInLavanow return the correct values.- Fixed a typo in the documentation by @thatgurkangurk.
- Fixed the command parser logic for chained commands.
- Fixed a server crash when spawning a simulated player due to the absence of an invalid network identifier.
0.5.3 - 2024-09-12¶
Added¶
- Added support for Minecraft v1.21.23.
- Introduced the
BlockDataclass, which encapsulates both the block type and a specific state from all possible block states. - Block types and block states can now be used as command arguments.
- Added
PlayerKnockbackEvent, triggered when a player receives knockback. Developers can modify the knockback that the player will receive. - Added
PlayerKickEvent, triggered when a player is kicked from the server, allowing for customization of kick messages. - Introduced the
BlockStateclass, representing a snapshot of a block at a specific point in time. PlayerJoinEventandPlayerQuitEventnow include getter and setter methods for customizing join/quit messages.- Integrated bStats metrics.
Changed¶
- BREAKING CHANGE: Renamed
Server::getNewScoreboardtoServer::createScoreboardfor consistency with other methods likecreateBossbarandcreateBlockData. - Lifted the restriction on the
/reloadcommand for console use. It can now be executed in-game.
Fixed¶
- Enforced the use of libc++ for C++ plugins on Linux to resolve symbol errors.
Player::setExpProgressnow correctly sets experience progress without precision loss.- Fixed an issue where death messages were being sent to players twice.
- Resolved a crash when calling
ItemStack::getTypeon an item fromPlayerInteractEventwhen the player interacts with a block with bare hands. PlayerInteractEvent::hasItemnow correctly returnsfalseif the player has no item in hand when interacting.
0.5.2 - 2024-08-30¶
Added¶
- Support for Minecraft v1.21.22.
- Boss bar API.
Block::getRelativeto get a block relative to a block face.BlockBreakEventtriggered when a player breaks a block.BlockPlaceEventtriggered when a player places a block against another block.PlayerInteractEventtriggered when a player right-clicks a block.PlayerInteractActorEventtriggered when a player interacts with an actor.- An auto installer script for installing Endstone on Linux (thanks to @legitbox).
Changed¶
- Check chunk states before getting the block in
Dimension::getBlockAt.
Fixed¶
- #38 - Plugins can now be properly loaded inside a virtual environment on Linux.
0.5.1 - 2024-08-24¶
Added¶
- Support for Minecraft v1.21.20.
Player::getScoreboardandPlayer::setScoreboardmethods to allow each player to have their own scoreboard ( separate from the main shared scoreboard).PlayerTeleportEvent, which is called when a player is teleported from one location to another.Actor::teleportmethod to teleport an actor to a given location or actor.- The server can now be gracefully shut down when
Ctrl+Cis pressed. /statuscommand to show the uptime and performance of the server.- Basic network API to allow plugins to send custom packets. Currently, only
SpawnParticleEffectPacketis supported. /reloadcommand to reload plugins in addition to addons.Player::sendToastmethod to send a toast message to players.- Furnace-related item data to DevTools by @smartcmd.
Changed¶
Player::isOpandPlayer::setOpmethods are now consistent with the similar methods in the scripting API.- The fix for the warning message about empty packets is now redundant and has been removed.
- BREAKING CHANGE:
Server::getLevelshas been replaced byServer::getLevel. - BREAKING CHANGE:
Player::getDeviceIdnow returns a string object instead of a UUID object, as it is not guaranteed to be a UUID on all platforms.
Fixed¶
- #29 - Commands will no longer be sent to a player who doesn't have
- #32 - Creating an action form without an
on_submitcallback will no longer crashes the server - Plugin config files are now always read and written in UTF-8 encoding.
- Added a missing parameter to
ActionForm::addButton. - Action forms without any buttons can now be displayed correctly on the client side.
- The Python executable can now be located in multiple possible locations on Linux.
0.5.0 - 2024-07-29¶
Added¶
- Support for Minecraft v1.21.3.
Actor::getIdfunction to get an actor's unique id, persisting between server runs.Actor::isDeadfunction to check if an actor is marked for removal post-death.ActorTeleportevent that triggers when an entity teleports (e.g., Enderman, Wolf).Mob::isGlidingfunction to check if a living entity is gliding.Player::sendTitleandPlayer::resetTitlefunctions for sending and resetting an on-screen title.Player::transferfunction to transfer a player to another server.Player::getXuidto get the Xbox User ID (XUID) of the player.- Python: package metadata can now be used as a fallback for plugin metadata.
- Python:
isinstancefunction can now be used to check if aCommandSenderis aPlayerorConsoleCommandSender. - Experimental Scoreboard API.
- Experimental Form API.
Changed¶
Playerclass now inherits from theMobclass instead ofActorclass.- BREAKING CHANGE: Plugin names should only contain lowercase letters, numbers, and underscores. Use the prefix property to display a different name for the plugin logger.
- BREAKING CHANGE: The
player.pingproperty now returns anintinstead ofdatetime.timedelta.
Fixed¶
- Fixed issue where
Server::setMaxPlayerswould crash due to a change in the internal struct in BDS. - Fixed issue that python executable cannot be located when running in a virtual environment.
0.4.10 - 2024-07-10¶
Added¶
- Support for Minecraft v1.21.2.
Player::getSkinmethod to retrieve the current skin of a player.- Support for recipes with output items possessing NBT (Named Binary Tag) tags. These tags are now also included in the dumped data.
Fixed¶
- Issue with shaped recipes. Recipes that have item tags as input (instead of item names) can now be dumped correctly.
0.4.9 - 2024-07-05¶
Added¶
- Support for Minecraft v1.21.1.
ActorDeathEventandPlayerDeathEventtriggers when an actor or a player dies.Player::giveExpandPlayer::giveExpLevelsfunctionality for adding experience points/levels added.Player::getAllowFlightandPlayer::setAllowFlightto check or grant the ability for players not in creative mode to fly.Player::setFlyingto toggle a player's flying status.- An overload of
sendMessageto allow sending of translatable messages with parameters that will be localized on the client side. Player::getExpProgressandPlayer::setExpProgressto get or set a player's progress towards the next level.Player::getExpLevelandPlayer::setExpLevelto get or set a player's current experience level.Player::getTotalExpto get the total amount of experiences a player has collected.Player::getLocaleto get the player's current locale.Player::getDeviceIdandPlayer::getDeviceOSto get information related to player's device.- A DevTools to help community projects get necessary data from BDS (currently only available on Windows). To open the
DevTools, use command
/devtoolsin the console.
Changed¶
Permissible.opproperty in the python binding is renamed toPermissible.is_op.- Crash dumps will now print system and version info in addition to stacktraces.
Fixed¶
- Suppressed warning message about empty UDP packets from the output.
0.4.8.1 - 2024-06-15¶
Added¶
- Support Minecraft v1.21 (Tricky Trials)
Fixed¶
Player::getPingnow returns correct value instead of -1 on Linux.Player::isFlyingnow works correctly in all conditions.- Calling python binding of
Server::getPlayerwith uuid no longer crashes. - Fixed a regression in vanilla command permissions.
- Permission attachment now works as expected.
0.4.7 - 2024-06-13¶
Added¶
Player::performCommandallows a player to execute a given command. During the command execution, the player is temporarily granted the operator permission.Level::getDimensionandLevel::getDimensionsfor getting dimensions within a specific level.Actor::getDimensionfor getting the dimension that an actor resides in.Player::getGameModeandPlayer::setGameModefor getting and setting a player's game mode.- Plugin configuration for Python plugins.
- Added more struct info by @Duckos-Mods in #11.
- World seed will no longer be sent to the client when
client-side-chunk-generation-enabledis disabled inserver.properties. - Command permissions are now checked before its parsing.
Server::dispatchCommandallows one to dispatch a command on the server.Server::getMaxPlayersandServer::setMaxPlayersfor getting and setting the maximum amount of players allowed to be logged in.Server::getPlayernow also accepts a string argument to get a player by name instead of UUID.
Changed¶
- Changed logging level look-up from using a hashmap to using a switch by @Duckos-Mods in #12
- Endstone no longer requires the presence of debug symbols at runtime.
Fixed¶
Actor::getVelocitynow returns the correct velocity when the actor rides a vehicle.- Python plugin loader now works correctly with Python 3.9.
0.4.6 - 2024-05-15¶
Fixed¶
- Improved the detection of Python executable.
0.4.5 - 2024-05-14¶
Added¶
- Bootstrap now protects specific files from overwriting during update.
- Python plugin loader now loads all
*.whlplugins under theplguinsfolder and their dependencies during server start up.
Fixed¶
- Scheduler now works on Linux.
0.4.3 - 2024-05-13¶
Added¶
Server::getOnlinePlayersfor getting all online players.Player::kickfor kicking a specific player with a custom message.Player::getPingfor getting the average latency of a connected player.Actor::getLocationandActor::getVelocityfor getting the location and velocity of an actor respectively.Actor::getLevelfor getting theLevelthat an actor resides in.
Changed¶
Levelis no longer created for eachDimensionin a Minecraft world. Instead, oneLevelnow manages multipleDimensions.Player::getAddressnow returns aSocketAddressinstead ofstd::string.Player::getPortwas removed, useSocketAddress::getPortinstead.- Executable
endstonenow accepts--server-folderinstead of--install-folder, and--no-confirminstead of--install. - Endstone server will now ask the user whether to update the Bedrock Dedicated Server if an older version is found.
0.4.2 - 2024-04-30¶
Added¶
Level::getDimensionfor getting the dimension of a specific level.Player::getAddressandPlayer::getPortfor getting the socket address and port of a specific player, respectively.- Logs are now written to
logs/latest.logwith rotations. - Basic scheduler implementation, currently supporting only synchronized task execution.
PlayerLoginEventis called when a player attempts to log in.
Changed¶
- Support for Minecraft v1.20.81 (Bedrock)
Fixed¶
- Server no longer crashes when the weather is changed on Linux.
0.4.1 - 2024-04-24¶
This release focuses on supporting game version v1.20.80, which adds several new features.
Additionally, we add a few useful functions to Player and Server.
Added¶
- Commands executed by players are now logged to the console.
- Message of
/saycommand will be logged to the console. PlayerCommandEventis called when a player attempts to execute a command.Server::broadcastMessagefor broadcasting messages to all players.BroadcastMessageEventis called when a message is broadcast by the server.
Changed¶
- Support for Minecraft v1.20.80 - Armored Paws (Bedrock)
Fixed¶
- Player permissions are recalculated when the op status is changed.
- Incorrect UUID for Players corrected.
0.4.0 - 2024-04-20¶
In this release, we added an event system and several basic interfaces for game objects like Level, Actor
and Player.
Added¶
- Event system that allows plugins to listen for specific events.
ServerLoadEventis called when a server is started up.Plugin::registerEventHandlerfor registering an event handler in C++ plugins.- Decorator
@event_handlerfor registering an event handler in Python plugins. PluginEnableEventandPluginDisableEventare called when a plugin is enabled or disabled.ServerPingListEventcan be listened to for customizing how the server appears in the client list.ServerCommandEventis called when the server executes a command.WeatherChangeEventandThunderChangeEventare called when the weather or thunder status changes in a level.- Basic interface
endstone::Levelfor a level/world. - Basic interface
endstone::Actorfor entities/actors. - Basic interface
endstone::Playerfor players. Server::getPlayerfor getting a player instance by UUID.Player::sendPopupandPlayer::sendTipfor sending popup and tip messages.- Stack traces are now printed to the console when an unrecoverable error occurs.
PlayerJoinEventandPlayerQuitEventare called when a player joins and leaves the server.ActorSpawnEventis called when an actor is spawned in the level.ActorRemoveEventis called when an actor is removed from the level.PlayerChatEventis called when a player sends a message.
Changed¶
- Singletons are now managed using
entt::locator. - Macro
ENDSTONE_PLUGINis improved to simplify the definition of plugin metadata. ColorFormatandGameModehave been moved fromendstone.utiltoendstonein the Python package.- Wheels are now built and released with
RelWithDebInfoconfiguration to enable stack trace printing. - Support for Minecraft v1.20.73 (Bedrock)
Fixed¶
- Server no longer crashes when
/listdcommand is executed.
0.3.0 - 2024-03-21¶
This is the second release of Endstone with a focus on the permission system and improving the plugin loading mechanisms.
Added¶
- Basic permission systems.
- Enforced Plugin API version checks for C++ and Python plugins to ensure ABI/API compatibility.
- Commands are now defined within the plugin metadata which will be automatically registered when the associated plugin is enabled.
- PluginDescription properties are extended to support
website,load_order,depend,soft_depend,load_before, andprovides.
Changed¶
- Improved
ENDSTONE_PLUGINmacro to further simplify the definition of plugin metadata. - Plugin names and websites are now displayed when using
/version [plugin: PluginName]. - Support for Minecraft v1.20.72 (Bedrock)
Fixed¶
- C++ plugin loader now respects the
prefixproperty of a plugin.
0.2.0 - 2024-03-19¶
Hello World! This is the first release of Endstone.
Added¶
- Basic plugin loader for C++ and Python plugins.
- Basic command system that allows plugins to register custom commands.