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¶
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::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
andActor::removeScoreboardTag
to modify the actor's tags. - Added support for loading zipped resource packs. You can now put
.zip
and.mcpack
resource packs under theresource_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
, andActor::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¶
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::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 usingServer::dispatchCommand
to executeexecute as {player_name} run {command}
.
Fixed¶
Actor::isOnGround
,Actor::isInWater
, andActor::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¶
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
andPlayerQuitEvent
now include getter and setter methods for customizing join/quit messages.- Integrated bStats metrics.
Changed¶
- BREAKING CHANGE: Renamed
Server::getNewScoreboard
toServer::createScoreboard
for consistency with other methods likecreateBossbar
andcreateBlockData
. - 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 fromPlayerInteractEvent
when the player interacts with a block with bare hands. PlayerInteractEvent::hasItem
now correctly returnsfalse
if 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::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¶
Added¶
- Support for Minecraft v1.21.20.
Player::getScoreboard
andPlayer::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
andPlayer::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 byServer::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¶
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
andPlayer::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 aCommandSender
is aPlayer
orConsoleCommandSender
. - Experimental Scoreboard API.
- Experimental Form API.
Changed¶
Player
class now inherits from theMob
class instead ofActor
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 anint
instead ofdatetime.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¶
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¶
Added¶
- Support for Minecraft v1.21.1.
ActorDeathEvent
andPlayerDeathEvent
triggers when an actor or a player dies.Player::giveExp
andPlayer::giveExpLevels
functionality for adding experience points/levels added.Player::getAllowFlight
andPlayer::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
andPlayer::setExpProgress
to get or set a player's progress towards the next level.Player::getExpLevel
andPlayer::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
andPlayer::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 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::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¶
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
andLevel::getDimensions
for getting dimensions within a specific level.Actor::getDimension
for getting the dimension that an actor resides in.Player::getGameMode
andPlayer::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 inserver.properties
. - Command permissions are now checked before its parsing.
Server::dispatchCommand
allows one to dispatch a command on the server.Server::getMaxPlayers
andServer::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¶
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
*.whl
plugins under theplguins
folder and their dependencies during server start up.
Fixed¶
- Scheduler now works on Linux.
0.4.3 - 2024-05-13¶
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
andActor::getVelocity
for getting the location and velocity of an actor respectively.Actor::getLevel
for getting theLevel
that an actor resides in.
Changed¶
Level
is no longer created for eachDimension
in a Minecraft world. Instead, oneLevel
now manages multipleDimension
s.Player::getAddress
now returns aSocketAddress
instead ofstd::string
.Player::getPort
was removed, useSocketAddress::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¶
Added¶
Level::getDimension
for getting the dimension of a specific level.Player::getAddress
andPlayer::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¶
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¶
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
andPluginDisableEvent
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
andThunderChangeEvent
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
andPlayer::sendTip
for sending popup and tip messages.- Stack traces are now printed to the console when an unrecoverable error occurs.
PlayerJoinEvent
andPlayerQuitEvent
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
andGameMode
have been moved fromendstone.util
toendstone
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¶
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_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.