diff --git a/data/computercraft/lua/rom/modules/auto_require.lua b/data/computercraft/lua/rom/modules/auto_require.lua index 57dfd8c..318def4 100644 --- a/data/computercraft/lua/rom/modules/auto_require.lua +++ b/data/computercraft/lua/rom/modules/auto_require.lua @@ -1,6 +1,7 @@ -- auto_require.lua: Automatically require libraries when accessed -local original_ENV = _ENV +-- Save the original require function +local original_require = require -- List of common libraries to auto-require local common_libs = { @@ -12,7 +13,7 @@ local common_libs = { -- Pre-load common libraries into a cache local lib_cache = {} for _, lib_name in ipairs(common_libs) do - local success, lib = pcall(require, lib_name) + local success, lib = pcall(original_require, lib_name) if success then lib_cache[lib_name] = lib end @@ -20,9 +21,9 @@ end -- Create a new environment with auto-require functionality local auto_env = setmetatable({}, { - __index = function(_, key) - -- Check if the key exists in the original environment - local val = original_ENV[key] + __index = function(_, key) + -- Check if the key exists in the global environment + local val = rawget(_G, key) if val ~= nil then return val end @@ -32,8 +33,8 @@ local auto_env = setmetatable({}, { return lib_cache[key] end - -- Try to require the module - local success, lib = pcall(require, key) + -- Try to require the module using the original require function + local success, lib = pcall(original_require, key) if success then lib_cache[key] = lib return lib @@ -44,9 +45,25 @@ local auto_env = setmetatable({}, { end }) --- Replace the global environment with our auto-require environment -setmetatable(_G, { - __index = auto_env -}) +-- Create a proxy function for require that uses the original require +_G.require = function(modname) + return original_require(modname) +end + +-- Add the auto-require environment to the global metatable +local old_mt = getmetatable(_G) or {} +local old_index = old_mt.__index +old_mt.__index = function(t, key) + -- Try the original index first + if old_index then + local val = old_index(t, key) + if val ~= nil then + return val + end + end + -- Then try our auto-require environment + return auto_env[key] +end +setmetatable(_G, old_mt) return {} \ No newline at end of file diff --git a/data/computercraft/lua/rom/startup/05_auto_require.lua b/data/computercraft/lua/rom/startup/05_auto_require.lua index 7e6c2d8..95ce4fd 100644 --- a/data/computercraft/lua/rom/startup/05_auto_require.lua +++ b/data/computercraft/lua/rom/startup/05_auto_require.lua @@ -1,2 +1,5 @@ -- Load auto_require module to automatically require libraries -require("auto_require") \ No newline at end of file +local success, err = pcall(require, "auto_require") +if not success then + print("Failed to load auto_require module: " .. tostring(err)) +end \ No newline at end of file