From 6f1ca8fc3b05e3f064db74ce7b4dc907a4f1878c Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Mon, 20 Jul 2026 14:49:38 +0200 Subject: [PATCH] begin --- CMakeLists.txt | 54 ++++++++++++++++++++++-- src/client/Minecraft.cpp | 3 +- src/client/Minecraft.h | 4 ++ src/main_dedicated.cpp | 13 +++++- src/network/ServerSideNetworkHandler.cpp | 3 -- src/plugins/PluginsManager.cpp | 16 +++++++ src/plugins/PluginsManager.hpp | 20 +++++++++ 7 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 src/plugins/PluginsManager.cpp create mode 100644 src/plugins/PluginsManager.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ec4358..8229728 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ project(MinecraftPE) include(cmake/CPM.cmake) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(CMAKE_POLICY_VERSION_MINIMUM 3.10) @@ -95,6 +95,46 @@ else() "GLFW_BUILD_TESTS OFF" "GLFW_BUILD_DOCS OFF" ) + + CPMAddPackage("gh:halx99/sol2#support-lua-5.5") + CPMAddPackage("gh:lua/lua#master") + + add_library( + lua STATIC + ${lua_SOURCE_DIR}/lapi.c + ${lua_SOURCE_DIR}/lauxlib.c + ${lua_SOURCE_DIR}/lbaselib.c + ${lua_SOURCE_DIR}/lcode.c + ${lua_SOURCE_DIR}/lcorolib.c + ${lua_SOURCE_DIR}/lctype.c + ${lua_SOURCE_DIR}/ldblib.c + ${lua_SOURCE_DIR}/ldebug.c + ${lua_SOURCE_DIR}/ldo.c + ${lua_SOURCE_DIR}/ldump.c + ${lua_SOURCE_DIR}/lfunc.c + ${lua_SOURCE_DIR}/lgc.c + ${lua_SOURCE_DIR}/linit.c + ${lua_SOURCE_DIR}/liolib.c + ${lua_SOURCE_DIR}/llex.c + ${lua_SOURCE_DIR}/lmathlib.c + ${lua_SOURCE_DIR}/lmem.c + ${lua_SOURCE_DIR}/loadlib.c + ${lua_SOURCE_DIR}/lobject.c + ${lua_SOURCE_DIR}/lopcodes.c + ${lua_SOURCE_DIR}/loslib.c + ${lua_SOURCE_DIR}/lparser.c + ${lua_SOURCE_DIR}/lstate.c + ${lua_SOURCE_DIR}/lstring.c + ${lua_SOURCE_DIR}/lstrlib.c + ${lua_SOURCE_DIR}/ltable.c + ${lua_SOURCE_DIR}/ltablib.c + ${lua_SOURCE_DIR}/ltm.c + ${lua_SOURCE_DIR}/lua.c + ${lua_SOURCE_DIR}/lundump.c + ${lua_SOURCE_DIR}/lutf8lib.c + ${lua_SOURCE_DIR}/lvm.c + ${lua_SOURCE_DIR}/lzio.c + ) endif() CPMAddPackage( @@ -215,6 +255,8 @@ file(GLOB SERVER_SOURCES "src/world/phys/HitResult.cpp" "src/commands/*.cpp" + + "src/plugins/*.cpp" ) file(GLOB CLIENT_SOURCES @@ -300,6 +342,8 @@ file(GLOB CLIENT_SOURCES "src/main.cpp" "src/commands/*.cpp" + "src/plugins/*.cpp" + ) if (${PLATFORM} STREQUAL "Desktop") @@ -313,10 +357,12 @@ target_compile_definitions("${PROJECT_NAME}-server" PUBLIC "STANDALONE_SERVER" " target_include_directories("${PROJECT_NAME}-server" PUBLIC "${CMAKE_SOURCE_DIR}/src/" + "${lua_SOURCE_DIR}/" + "project/lib_projects/raknet/jni/RaknetSources" ) -target_link_libraries("${PROJECT_NAME}-server" ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBS}) +target_link_libraries("${PROJECT_NAME}-server" ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBS} lua sol2::sol2) add_executable(${PROJECT_NAME} ${CLIENT_SOURCES}) @@ -328,6 +374,8 @@ target_include_directories(${PROJECT_NAME} PUBLIC "${openal_SOURCE_DIR}/include" "${glfw_SOURCE_DIR}/include" "lib/include" + "${lua_SOURCE_DIR}/" + ) if(${PLATFORM} MATCHES "Web") @@ -375,7 +423,7 @@ endif() # Client target_compile_definitions(${PROJECT_NAME} PUBLIC "OPENGL_ES" "NO_EGL" ${PLATFORM}) -target_link_libraries(${PROJECT_NAME} zlib ${PNG_LIB} OpenAL::OpenAL glfw ${EXTRA_LIBS}) +target_link_libraries(${PROJECT_NAME} zlib ${PNG_LIB} OpenAL::OpenAL glfw ${EXTRA_LIBS} lua sol2::sol2) if (OpenSSL_FOUND) target_link_libraries(${PROJECT_NAME} OpenSSL::SSL OpenSSL::Crypto) diff --git a/src/client/Minecraft.cpp b/src/client/Minecraft.cpp index 8c90b6f..7ce53e5 100755 --- a/src/client/Minecraft.cpp +++ b/src/client/Minecraft.cpp @@ -186,7 +186,8 @@ Minecraft::Minecraft() : commandPort(4711), reserved_d1(0),reserved_d2(0), reserved_f1(0),reserved_f2(0), options(this), - m_commandManager() + m_commandManager(), + m_pluginsManager(*level) { //#ifdef ANDROID diff --git a/src/client/Minecraft.h b/src/client/Minecraft.h index f1d966f..7ffe0d5 100755 --- a/src/client/Minecraft.h +++ b/src/client/Minecraft.h @@ -3,6 +3,8 @@ #include "Options.h" #include "commands/CommandManager.hpp" +#include + #ifndef STANDALONE_SERVER #include "MouseHandler.h" #include "gui/Gui.h" @@ -243,6 +245,8 @@ private: CommandServer* _commandServer; CommandManager m_commandManager; + + PluginsManager m_pluginsManager; }; #endif /*NET_MINECRAFT_CLIENT__Minecraft_H__*/ diff --git a/src/main_dedicated.cpp b/src/main_dedicated.cpp index fcf14ce..03ce519 100755 --- a/src/main_dedicated.cpp +++ b/src/main_dedicated.cpp @@ -15,6 +15,7 @@ #include "platform/time.h" #include "SharedConstants.h" #include "world/level/LevelConstants.h" +#include #define MAIN_CLASS NinecraftApp static App* g_app = 0; @@ -64,7 +65,6 @@ std::string findStringInConfig(std::string line, std::string config) { return valueStr; } - int main(int numArguments, char* pszArgs[]) { std::ifstream serverProperties("server.properties"); @@ -148,7 +148,7 @@ int main(int numArguments, char* pszArgs[]) { } printf("Level Name: %s\n", levelName.c_str()); - + AppContext appContext; appContext.platform = new AppPlatform(); App* app = new MAIN_CLASS(); @@ -201,6 +201,15 @@ int main(int numArguments, char* pszArgs[]) { } } + std::string pluginsFolder = "plugins/"; + struct stat sb; + + if (stat(pluginsFolder.c_str(), &sb) == 0) { + + } else { + + } + std::cout << "Level has been generated in " << getTimeS() - startTime << std::endl; ((MAIN_CLASS*)g_app)->level->saveLevelData(); std::cout << "Level has been saved!" << std::endl; diff --git a/src/network/ServerSideNetworkHandler.cpp b/src/network/ServerSideNetworkHandler.cpp index 474d9ad..66605e1 100755 --- a/src/network/ServerSideNetworkHandler.cpp +++ b/src/network/ServerSideNetworkHandler.cpp @@ -226,7 +226,6 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac std::string nicknameLower = packet->clientName.C_String(); std::transform(nicknameLower.begin(), nicknameLower.end(), nicknameLower.begin(), ::tolower); - printf("%s lower \n", nicknameLower.c_str()); for (int i = 0; i < level->players.size(); i++) { ServerPlayer* player = (ServerPlayer*) level->players.at(i); @@ -306,8 +305,6 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ReadyPac if (packet->type == ReadyPacket::READY_REQUESTEDCHUNKS) onReady_RequestedChunks(source); - - LOGI("Ready player two ready ready player two!!\n "); } void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID& source) diff --git a/src/plugins/PluginsManager.cpp b/src/plugins/PluginsManager.cpp new file mode 100644 index 0000000..14ca9f2 --- /dev/null +++ b/src/plugins/PluginsManager.cpp @@ -0,0 +1,16 @@ +#include +#include + +PluginsManager::PluginsManager(Level& level) : m_level(level) { + m_lua.open_libraries(sol::lib::base); + + registerTypes(); +} + +void PluginsManager::registerTypes() { + m_lua.set_function("subscribe", &PluginsManager::subscribe); +} + +void PluginsManager::subscribe(std::string event, sol::function function) { + m_callbacks.at(event).push_back(function); +} \ No newline at end of file diff --git a/src/plugins/PluginsManager.hpp b/src/plugins/PluginsManager.hpp new file mode 100644 index 0000000..f0418c9 --- /dev/null +++ b/src/plugins/PluginsManager.hpp @@ -0,0 +1,20 @@ +#pragma once +#include +#include +#include + +class Level; + +class PluginsManager { +public: + PluginsManager(Level& level); + + void registerTypes(); + + void subscribe(std::string event, sol::function function); +private: + std::unordered_map> m_callbacks; + + sol::state m_lua; + Level& m_level; +}; \ No newline at end of file