diff --git a/vmf/scripts/mods/vmf/modules/core/packages.lua b/vmf/scripts/mods/vmf/modules/core/packages.lua index 0a35408..c55cf4a 100644 --- a/vmf/scripts/mods/vmf/modules/core/packages.lua +++ b/vmf/scripts/mods/vmf/modules/core/packages.lua @@ -1,29 +1,29 @@ local vmf = get_mod("VMF") -local _initialized = false - -local _mod_handles = {} local _queued_packages = {} local _loading_package = nil local _loaded_packages = {} function VMFMod:load_package(package_name, callback) - if not _initialized then - self:error("Package manager has not been initialized yet. It can only be used after the `all_mods_loaded` event has been processed.") - return - elseif self:has_package_loaded(package_name) then + if self:has_package_loaded(package_name) then self:error("Package '%s' has already been loaded", package_name) return end + local mod_handle = self:get_internal_data("mod_handle") + + if not mod_handle then + self:error("Failed to get mod handle. Package management is not available.") + return + end + if not _loaded_packages[self] then _loaded_packages[self] = {} end local package_handle = string.format("resource_packages/%s/%s", self:get_name(), package_name) - local workshop_id = self:get_internal_data("workshop_id") - local resource_package = Mod.resource_package(_mod_handles[workshop_id], package_handle) + local resource_package = Mod.resource_package(mod_handle, package_handle) local is_loading = self:is_package_loading(package_name) @@ -51,11 +51,6 @@ function VMFMod:load_package(package_name, callback) end function VMFMod:unload_package(package_name) - if not _initialized then - self:error("Package manager has not been initialized yet. It can only be used after the `all_mods_loaded` event has been processed.") - return - end - if not self:has_package_loaded(package_name) then self:error("Package '%s' has not been loaded", package_name) return @@ -69,11 +64,6 @@ function VMFMod:unload_package(package_name) end function VMFMod:is_package_loading(package_name) - if not _initialized then - self:error("Package manager has not been initialized yet. It can only be used after the `all_mods_loaded` event has been processed.") - return - end - if _loading_package and _loading_package.mod == self and _loading_package.package_name == package_name then return true end @@ -88,25 +78,12 @@ function VMFMod:is_package_loading(package_name) end function VMFMod:has_package_loaded(package_name) - if not _initialized then - self:error("Package manager has not been initialized yet. It can only be used after the `all_mods_loaded` event has been processed.") - return - end - local loaded_packages = _loaded_packages[self] return loaded_packages and loaded_packages[package_name] ~= nil end function VMFMod:is_package_manager_initialized() - return _initialized -end - -function vmf.initialize_package_manager() - for _, mod_data in ipairs(Managers.mod._mods) do - _mod_handles[mod_data.id] = mod_data.handle - end - - _initialized = true + return self:get_data("mod_handle") ~= nil end function vmf.update_package_manager() diff --git a/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua b/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua index ef69dd3..9b286c4 100644 --- a/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua +++ b/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua @@ -115,7 +115,14 @@ function vmf.initialize_mod_data(mod, mod_data) vmf.set_internal_data(mod, "is_togglable", mod_data.is_togglable or mod_data.is_mutator) vmf.set_internal_data(mod, "is_mutator", mod_data.is_mutator) vmf.set_internal_data(mod, "allow_rehooking", mod_data.allow_rehooking) - vmf.set_internal_data(mod, "workshop_id", mod_data.workshop_id) + + local mod_manager = Managers.mod + local current_mod_load_index = mod_manager._mod_load_index + if current_mod_load_index then + vmf.set_internal_data(mod, "mod_handle", mod_manager._mods[current_mod_load_index].handle) + else + mod:warning("Could not determine current mod load index. Package management won't be available for this mod.") + end -- Register mod as mutator @TODO: calling this after options initialization would be better, I guess? if mod_data.is_mutator then diff --git a/vmf/scripts/mods/vmf/vmf_loader.lua b/vmf/scripts/mods/vmf/vmf_loader.lua index 29b28a7..d3b373c 100644 --- a/vmf/scripts/mods/vmf/vmf_loader.lua +++ b/vmf/scripts/mods/vmf/vmf_loader.lua @@ -65,7 +65,6 @@ function vmf_mod_object:update(dt) if not vmf.all_mods_were_loaded and Managers.mod._state == "done" then vmf.generate_keybinds() - vmf.initialize_package_manager() vmf.initialize_vmf_options_view() vmf.create_network_dictionary() vmf.ping_vmf_users()