From c9a8d9bb14f30fade84ebd20fb558f8d7a1ea209 Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 24 Jan 2025 23:40:58 +0000 Subject: [PATCH] fix: compilation errors on Linux --- src/endstone/core/platform_linux.cpp | 2 +- src/endstone/core/server.cpp | 15 +++++++++++---- src/endstone/core/server.h | 14 ++++++-------- src/endstone/runtime/CMakeLists.txt | 2 +- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/endstone/core/platform_linux.cpp b/src/endstone/core/platform_linux.cpp index 1ea064ede..0e3850e1f 100644 --- a/src/endstone/core/platform_linux.cpp +++ b/src/endstone/core/platform_linux.cpp @@ -99,7 +99,7 @@ std::string get_executable_pathname() return module_info.pathname; } -std::string_view get_name() +std::string_view get_platform() { return "Linux"; } diff --git a/src/endstone/core/server.cpp b/src/endstone/core/server.cpp index 56a1a96aa..56c2df3e0 100644 --- a/src/endstone/core/server.cpp +++ b/src/endstone/core/server.cpp @@ -76,6 +76,9 @@ EndstoneServer::~EndstoneServer() void EndstoneServer::init(ServerInstance &server_instance) { + if (server_instance_) { + throw std::runtime_error("Server instance already initialized."); + } server_instance_ = &server_instance; getLogger().info("{}This server is running {} version: {} (Minecraft: {})", ColorFormat::DarkAqua + ColorFormat::Bold, getName(), getVersion(), getMinecraftVersion()); @@ -88,6 +91,9 @@ void EndstoneServer::init(ServerInstance &server_instance) void EndstoneServer::setLevel(::Level &level) { + if (level_) { + throw std::runtime_error("Level already initialized."); + } level_ = std::make_unique(level); scoreboard_ = std::make_unique(level.getScoreboard()); command_map_ = std::make_unique(*this); @@ -100,11 +106,12 @@ void EndstoneServer::setLevel(::Level &level) void EndstoneServer::setResourcePackRepository(Bedrock::NotNullNonOwnerPtr repo) { - resource_pack_repository_ = std::move(repo); - if (!resource_pack_source_) { - resource_pack_source_ = std::make_unique( - resource_pack_repository_->getResourcePacksPath().getContainer(), PackType::Resources); + if (resource_pack_repository_) { + throw std::runtime_error("Resource pack repository already set."); } + resource_pack_repository_ = std::move(repo); + resource_pack_source_ = std::make_unique( + resource_pack_repository_->getResourcePacksPath().getContainer(), PackType::Resources); } PackSource &EndstoneServer::getPackSource() const diff --git a/src/endstone/core/server.h b/src/endstone/core/server.h index b7ebfd73c..e21d74de7 100644 --- a/src/endstone/core/server.h +++ b/src/endstone/core/server.h @@ -107,7 +107,12 @@ class EndstoneServer : public Server { [[nodiscard]] EndstoneScoreboard &getPlayerBoard(const EndstonePlayer &player) const; void setPlayerBoard(EndstonePlayer &player, Scoreboard &scoreboard); void removePlayerBoard(EndstonePlayer &player); + void tick(std::uint64_t current_tick, const std::function &tick_function); + void init(ServerInstance &server_instance); + void setLevel(::Level &level); + void setResourcePackRepository(Bedrock::NotNullNonOwnerPtr repo); + PackSource &getPackSource() const; [[nodiscard]] ServerInstance &getServer() const; @@ -115,18 +120,11 @@ class EndstoneServer : public Server { private: friend class EndstonePlayer; - friend class ResourcePackRepository; - friend class ServerInstanceEventCoordinator; - - void init(ServerInstance &server_instance); - void setLevel(::Level &level); - void setResourcePackRepository(Bedrock::NotNullNonOwnerPtr repo); - PackSource &getPackSource() const; void enablePlugin(Plugin &plugin); void loadResourcePacks(); void registerGameplayHandlers(); - ServerInstance *server_instance_; + ServerInstance *server_instance_{nullptr}; Logger &logger_; std::unique_ptr crash_handler_; std::unique_ptr signal_handler_; diff --git a/src/endstone/runtime/CMakeLists.txt b/src/endstone/runtime/CMakeLists.txt index 844ef42b3..e6eb741bf 100644 --- a/src/endstone/runtime/CMakeLists.txt +++ b/src/endstone/runtime/CMakeLists.txt @@ -45,7 +45,7 @@ endif () if (UNIX) find_package(libelf REQUIRED) target_link_libraries(endstone_runtime PRIVATE libelf::libelf) - target_link_options(endstone_runtime PRIVATE -g -Wl,--exclude-libs,ALL) + target_link_options(endstone_runtime PRIVATE -g -Wl,--no-undefined,--exclude-libs,ALL) target_compile_options(endstone_runtime PRIVATE -O2 -DNDEBUG -g -fvisibility=hidden -fms-extensions) if (ENDSTONE_SEPARATE_DEBUG_INFO) add_custom_command(