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.5.3 - Unreleased¶
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.