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