# Contributing to Mineclonia So you want to contribute to Mineclonia? Wow, thank you! :-) Mineclonia is maintained by ryvnf and cora. By asking us to include your changes in this game, you agree that they fall under the terms of the GPLv3 license, which means they will become part of a free/libre software. ## Inclusion criteria The project goals are listed under the project description in the [README](./src/branch/main/README.md). Contributions that do not align with the project goals will not be accepted. The main goal of Mineclonia is to be a stable and performant clone of Minecraft. We suggest using the [Minecraft wiki](https://minecraft.wiki/w/Minecraft_Wiki) as a reference when implementing new features. While the primary goal of Mineclonia is to clone Minecraft gameplay, sometimes contributions containing minor deviations from Minecraft will be included. These deviations should be motivated either by Luanti engine limitations or other technical difficulties replicating Minecraft behaviour. The addition of bonus features not found in Minecraft will generally not be accepted. Most of the time we will suggest putting such features in a separate mod since Mineclonia has modding support. Contributions which fix bugs or incomplete features are always welcome. Contributions of Minecraft features not yet implemented in Mineclonia are also welcome but should be complete before their inclusion. Assets like sounds and textures must come from sources which allow their use. ## Code Guidelines * Each mod must provide `mod.conf`. * Mod names are snake case, and newly added mods start with `mcl_`, e.g. `mcl_core`, `mcl_farming`, `mcl_monster_eggs`. Keep in mind Luanti does not support capital letters in mod names. * To export functions, store them inside a global table named like the mod, e.g. ```lua mcl_example = {} function mcl_example.do_something() -- ... end ``` * Public functions should not use self references but rather just access the table directly, e.g. ```lua -- bad function mcl_example:do_something() end -- good function mcl_example.do_something() end ``` * Use modern Luanti API, e.g. no usage of `minetest.env` * Tabs should be used for indent, spaces for alignment, e.g. ```lua -- use tabs for indent for i = 1, 10 do if i % 3 == 0 then print(i) end end -- use tabs for indent and spaces to align things some_table = { {"a string", 5}, {"a very much longer string", 10}, } ``` * Use double quotes for strings, e.g. `"asdf"` rather than `'asdf'` * Use snake_case rather than CamelCase, e.g. `my_function` rather than `MyFunction` * Don't declare functions as an assignment, e.g. ```lua -- bad local some_local_func = function() -- ... end my_mod.some_func = function() -- ... end -- good local function some_local_func() -- ... end function my_mod.some_func() -- ... end ```