Skip to content

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.6 - Unreleased

Compare with 0.5.5

0.5.5 - 2024-10-26

Compare with 0.5.4.1

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::isDisplayed method to check if an objective is being displayed in any of the scoreboard slots.
  • Added Server::getOnlineMode to check if the server is running with authentication enabled.
  • Added Actor::getScoreboardTags to get the list of tags added to the actor.
  • Added Actor::addScoreboardTag and Actor::removeScoreboardTag to modify the actor's tags.
  • Added support for loading zipped resource packs. You can now put .zip and .mcpack resource packs under the resource_packs folder, and they will be loaded automatically when the server starts.
  • Added support for encrypted resource packs. You can put the keys in the .zip.key or .mcpack.key format next to the resource packs.
  • Added the ScriptMessageEvent, which will get called when a script message is sent using the /scriptevent command.
  • Added Server::getLanguage to translate a message into a specific locale.
  • Added Actor::getHealth, Actor::setHealth, and Actor::getMaxHealth for getting and setting actor health.
  • Added CommandSenderWrapper to capture the output of command execution for any command sender.
  • Added Player::spawnParticle to 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::Result to 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

Compare with 0.5.4

Fixed

  • Fixed a crash that could occur when the player uses emotes.

0.5.4 - 2024-09-19

Compare with 0.5.3

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::performCommand now 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 using Server::dispatchCommand to execute execute as {player_name} run {command}.

Fixed

  • Actor::isOnGround, Actor::isInWater, and Actor::isInLava now 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

Compare with 0.5.2

Added

  • Added support for Minecraft v1.21.23.
  • Introduced the BlockData class, 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 BlockState class, representing a snapshot of a block at a specific point in time.
  • PlayerJoinEvent and PlayerQuitEvent now include getter and setter methods for customizing join/quit messages.
  • Integrated bStats metrics.

Changed

  • BREAKING CHANGE: Renamed Server::getNewScoreboard to Server::createScoreboard for consistency with other methods like createBossbar and createBlockData.
  • Lifted the restriction on the /reload command 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::setExpProgress now 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::getType on an item from PlayerInteractEvent when the player interacts with a block with bare hands.
  • PlayerInteractEvent::hasItem now correctly returns false if the player has no item in hand when interacting.

0.5.2 - 2024-08-30

Compare with 0.5.1

Added

  • Support for Minecraft v1.21.22.
  • Boss bar API.
  • Block::getRelative to get a block relative to a block face.
  • BlockBreakEvent triggered when a player breaks a block.
  • BlockPlaceEvent triggered when a player places a block against another block.
  • PlayerInteractEvent triggered when a player right-clicks a block.
  • PlayerInteractActorEvent triggered 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

Compare with 0.5.0

Added

  • Support for Minecraft v1.21.20.
  • Player::getScoreboard and Player::setScoreboard methods 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::teleport method to teleport an actor to a given location or actor.
  • The server can now be gracefully shut down when Ctrl + C is pressed.
  • /status command to show the uptime and performance of the server.
  • Basic network API to allow plugins to send custom packets. Currently, only SpawnParticleEffectPacket is supported.
  • /reload command to reload plugins in addition to addons.
  • Player::sendToast method to send a toast message to players.
  • Furnace-related item data to DevTools by @smartcmd.

Changed

  • Player::isOp and Player::setOp methods 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::getLevels has been replaced by Server::getLevel.
  • BREAKING CHANGE: Player::getDeviceId now 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_submit callback 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

Compare with 0.4.10

Added

  • Support for Minecraft v1.21.3.
  • Actor::getId function to get an actor's unique id, persisting between server runs.
  • Actor::isDead function to check if an actor is marked for removal post-death.
  • ActorTeleport event that triggers when an entity teleports (e.g., Enderman, Wolf).
  • Mob::isGliding function to check if a living entity is gliding.
  • Player::sendTitle and Player::resetTitle functions for sending and resetting an on-screen title.
  • Player::transfer function to transfer a player to another server.
  • Player::getXuid to get the Xbox User ID (XUID) of the player.
  • Python: package metadata can now be used as a fallback for plugin metadata.
  • Python: isinstance function can now be used to check if a CommandSender is a Player or ConsoleCommandSender.
  • Experimental Scoreboard API.
  • Experimental Form API.

Changed

  • Player class now inherits from the Mob class instead of Actor class.
  • 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.ping property now returns an int instead of datetime.timedelta.

Fixed

  • Fixed issue where Server::setMaxPlayers would 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

Compare with 0.4.9

Added

  • Support for Minecraft v1.21.2.
  • Player::getSkin method 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

Compare with 0.4.8.1

Added

  • Support for Minecraft v1.21.1.
  • ActorDeathEvent and PlayerDeathEvent triggers when an actor or a player dies.
  • Player::giveExp and Player::giveExpLevels functionality for adding experience points/levels added.
  • Player::getAllowFlight and Player::setAllowFlight to check or grant the ability for players not in creative mode to fly.
  • Player::setFlying to toggle a player's flying status.
  • An overload of sendMessage to allow sending of translatable messages with parameters that will be localized on the client side.
  • Player::getExpProgress and Player::setExpProgress to get or set a player's progress towards the next level.
  • Player::getExpLevel and Player::setExpLevel to get or set a player's current experience level.
  • Player::getTotalExp to get the total amount of experiences a player has collected.
  • Player::getLocale to get the player's current locale.
  • Player::getDeviceId and Player::getDeviceOS to 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 /devtools in the console.

Changed

  • Permissible.op property in the python binding is renamed to Permissible.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

Compare with 0.4.7

Added

  • Support Minecraft v1.21 (Tricky Trials)

Fixed

  • Player::getPing now returns correct value instead of -1 on Linux.
  • Player::isFlying now works correctly in all conditions.
  • Calling python binding of Server::getPlayer with uuid no longer crashes.
  • Fixed a regression in vanilla command permissions.
  • Permission attachment now works as expected.

0.4.7 - 2024-06-13

Compare with 0.4.6

Added

  • Player::performCommand allows a player to execute a given command. During the command execution, the player is temporarily granted the operator permission.
  • Level::getDimension and Level::getDimensions for getting dimensions within a specific level.
  • Actor::getDimension for getting the dimension that an actor resides in.
  • Player::getGameMode and Player::setGameMode for 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-enabled is disabled in server.properties.
  • Command permissions are now checked before its parsing.
  • Server::dispatchCommand allows one to dispatch a command on the server.
  • Server::getMaxPlayers and Server::setMaxPlayers for getting and setting the maximum amount of players allowed to be logged in.
  • Server::getPlayer now 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::getVelocity now 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

Compare with 0.4.5

Fixed

  • Improved the detection of Python executable.

0.4.5 - 2024-05-14

Compare with 0.4.3

Added

  • Bootstrap now protects specific files from overwriting during update.
  • Python plugin loader now loads all *.whl plugins under the plguins folder and their dependencies during server start up.

Fixed

  • Scheduler now works on Linux.

0.4.3 - 2024-05-13

Compare with 0.4.2

Added

  • Server::getOnlinePlayers for getting all online players.
  • Player::kick for kicking a specific player with a custom message.
  • Player::getPing for getting the average latency of a connected player.
  • Actor::getLocation and Actor::getVelocity for getting the location and velocity of an actor respectively.
  • Actor::getLevel for getting the Level that an actor resides in.

Changed

  • Level is no longer created for each Dimension in a Minecraft world. Instead, one Level now manages multiple Dimensions.
  • Player::getAddress now returns a SocketAddress instead of std::string. Player::getPort was removed, use SocketAddress::getPort instead.
  • Executable endstone now accepts --server-folder instead of --install-folder, and --no-confirm instead 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

Compare with 0.4.1

Added

  • Level::getDimension for getting the dimension of a specific level.
  • Player::getAddress and Player::getPort for getting the socket address and port of a specific player, respectively.
  • Logs are now written to logs/latest.log with rotations.
  • Basic scheduler implementation, currently supporting only synchronized task execution.
  • PlayerLoginEvent is 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

Compare with 0.4.0

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 /say command will be logged to the console.
  • PlayerCommandEvent is called when a player attempts to execute a command.
  • Server::broadcastMessage for broadcasting messages to all players.
  • BroadcastMessageEvent is 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

Compare with 0.3.0

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.
  • ServerLoadEvent is called when a server is started up.
  • Plugin::registerEventHandler for registering an event handler in C++ plugins.
  • Decorator @event_handler for registering an event handler in Python plugins.
  • PluginEnableEvent and PluginDisableEvent are called when a plugin is enabled or disabled.
  • ServerPingListEvent can be listened to for customizing how the server appears in the client list.
  • ServerCommandEvent is called when the server executes a command.
  • WeatherChangeEvent and ThunderChangeEvent are called when the weather or thunder status changes in a level.
  • Basic interface endstone::Level for a level/world.
  • Basic interface endstone::Actor for entities/actors.
  • Basic interface endstone::Player for players.
  • Server::getPlayer for getting a player instance by UUID.
  • Player::sendPopup and Player::sendTip for sending popup and tip messages.
  • Stack traces are now printed to the console when an unrecoverable error occurs.
  • PlayerJoinEvent and PlayerQuitEvent are called when a player joins and leaves the server.
  • ActorSpawnEvent is called when an actor is spawned in the level.
  • ActorRemoveEvent is called when an actor is removed from the level.
  • PlayerChatEvent is called when a player sends a message.

Changed

  • Singletons are now managed using entt::locator.
  • Macro ENDSTONE_PLUGIN is improved to simplify the definition of plugin metadata.
  • ColorFormat and GameMode have been moved from endstone.util to endstone in the Python package.
  • Wheels are now built and released with RelWithDebInfo configuration to enable stack trace printing.
  • Support for Minecraft v1.20.73 (Bedrock)

Fixed

  • Server no longer crashes when /listd command is executed.

0.3.0 - 2024-03-21

Compare with 0.2.0

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, and provides.

Changed

  • Improved ENDSTONE_PLUGIN macro 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 prefix property 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.

Comments