From dcaf87988bfac2b622eba4003ff7c52b41088601 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 19 Apr 2026 22:04:40 +0300 Subject: [PATCH] fix components parent environment --- src/content/ContentPack.hpp | 8 ++++++++ src/logic/scripting/scripting_entities.cpp | 14 +++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/content/ContentPack.hpp b/src/content/ContentPack.hpp index 06a8cf4dc..37dbe6b1b 100644 --- a/src/content/ContentPack.hpp +++ b/src/content/ContentPack.hpp @@ -114,6 +114,14 @@ struct ContentPack { default: return ""; } } + + static std::string_view getPrefix(std::string_view path) { + size_t pos = path.find(':'); + if (pos == std::string::npos) { + return ""; + } + return path.substr(0, pos); + } }; struct WorldFuncsSet { diff --git a/src/logic/scripting/scripting_entities.cpp b/src/logic/scripting/scripting_entities.cpp index 32a396b25..7e286c713 100644 --- a/src/logic/scripting/scripting_entities.cpp +++ b/src/logic/scripting/scripting_entities.cpp @@ -1,5 +1,6 @@ #include "scripting.hpp" +#include "debug/Logger.hpp" #include "lua/lua_engine.hpp" #include "objects/Entities.hpp" #include "objects/EntityDef.hpp" @@ -11,6 +12,7 @@ using namespace scripting; +static debug::Logger logger("scripting-entities"); static inline const std::string STDCOMP = "stdcomp"; [[nodiscard]] static scriptenv create_component_environment( @@ -61,9 +63,19 @@ static void create_component( const dv::value& args, const dv::value& saved ) { + auto parentEnv = get_root_environment(); + auto prefix = ContentPack::getPrefix(component.name); + const auto& content = *scripting::content; + if (auto runtime = content.getPackRuntime(std::string(prefix))) { + parentEnv = runtime->getEnvironment(); + } else { + logger.warning() << "pack environment is not available for " + << component.name; + } + logger.debug() << "creating instance of component " << component.name; lua::pushvalue(L, entityIdx); auto compenv = create_component_environment( - get_root_environment(), -1, component.name + std::move(parentEnv), -1, component.name ); lua::get_from(L, lua::CHUNKS_TABLE, component.name, true); lua::pushenv(L, *compenv);