Splitting plugin in files - Printable Version +- Cuberite Forum (https://forum.cuberite.org) +-- Forum: Plugins (https://forum.cuberite.org/forum-1.html) +--- Forum: Plugin Discussion (https://forum.cuberite.org/forum-8.html) +--- Thread: Splitting plugin in files (/thread-2258.html) Pages:
1
2
|
Splitting plugin in files - chrobione - 12-18-2015 I am trying to break my plugin into files, IE SqlLite.lua, Commands.lua, etc... So I don't have this massive single huge file with everything in it. The problem is that I don't understand how the different files are loaded by the cuberite server, IE do i have to use like a main.lua file that tells the cuberite server all of my files, or since the files live in the plugin folder they are all loaded? I been looking at all of the multiple file plugins and the connection on how this works is eluding me at this time. If someone could post me some language on how to search for the answer it would be great, or if you just want to tell me that is cool too. Thank you for your time and efforts on helping this. RE: noob Question - Zee1234 - 12-18-2015 Just did some testing (also from working with plugins for a bit). Any .lua files in the top level folder will be able to communicate. I ASSUME that they are all being compiled as if is they were one file, so they can share function calls and variables. However, anything inside of nested folders does not seem to automatically get loaded in. You SHOULD be able to use require. I see no reason at all why it wouldn't work, but I've seen weirder things in the past. RE: Splitting plugin in files - xoft - 12-18-2015 Cuberite loads all Lua files in the plugin's folder, and initializes them in alphabetical order, except for the Info.lua file, which gets initialized always as the last one. Note that the sort order is case sensitive, so on platforms with case-preserving filesystems (almost all todays platforms, including Windows) it makes a difference if you name your file A.lua or a.lua. RE: Splitting plugin in files - xoft - 12-18-2015 Also note that if you break stuff into files, all "local" declarations will not be shared between the files, while all global (default) declarations will RE: noob Question - chrobione - 12-18-2015 (12-18-2015, 04:17 PM)Zee1234 Wrote: Just did some testing (also from working with plugins for a bit). Thank you for information and thank you for the research material to read very helpful indeed. chrobi RE: Splitting plugin in files - chrobione - 12-18-2015 (12-18-2015, 05:01 PM)xoft Wrote: Cuberite loads all Lua files in the plugin's folder, and initializes them in alphabetical order, except for the Info.lua file, which gets initialized always as the last one. Thank you for this information. I will make sure that my naming conventions will follow suit with need for my loading orders. I really appreciate everyone's help with this. Chrobi RE: Splitting plugin in files - Zee1234 - 12-18-2015 One more note. Assume you have this format: --#Main.lua require "subfolder/filename.lua" function Initialize(a_Plugin) --stuff function_from_filename() --stuff end --#subfolder/filename.lua function function_from_filename() --stuff local_function_in_filename() end local function local_function_in_filename() --stuff end This apparently doesn't work. You have to define the local function above the first function. Although, this is probably a "Lua" thing, not a "Cuberite" thing. RE: Splitting plugin in files - sphinxc0re - 12-18-2015 The "require" method would be really good to enforce a good structure to the plugins. Why doesn't the server load the files that way? RE: Splitting plugin in files - Seadragon91 - 12-18-2015 It' also possible to use dofile to load a lua file. I have this code, that loads all lua files in the folder from the array folders. This also allows you to structure your files. The code has to be placed outside of a function, in a lua file in your main plugin folder. function LoadLuaFiles() local folders = { "/code", "/code/classes", "/code/commands" } local localFolder = cPluginManager:GetCurrentPlugin():GetLocalFolder() for _, folder in pairs(folders) do local files = cFile:GetFolderContents(localFolder .. "/" .. folder) for _, file in pairs(files) do if (string.sub(file, #file -3, #file) == ".lua") then dofile(localFolder .. folder .. "/" .. file) end end end end LoadLuaFiles() RE: Splitting plugin in files - NiLSPACE - 12-18-2015 @Seadragon91 that depends. If the files in the subfolders contain command handlers then that means the Info.lua file won't have them. Initialize is called after all files in the root of the plugin are loaded. It's the reason why I have the code to load the subfolders in WorldEdit outside the Initialize function: https://github.com/cuberite/WorldEdit/blob/master/main.lua#L24-L36 That makes me think, can't we exclude the Info.lua file, and let the InfoReg file load it? Then it's loaded only when needed. |