EinsDreiDreiSieben/mods/fmod
2025-05-14 16:36:42 +02:00
..
.github Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
.cdb.json Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
.check_date.sh Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
.editorconfig Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
.luacheckrc Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
.pre-commit-config.yaml Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
build_has.lua Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
get_settings.lua Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
init.lua Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
LICENSE.txt Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
MEDIA_LICENSE.txt Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
mod.conf Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
parse_version.lua Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
README.md Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00
screenshot.png Charakterbewegungen hinzugefügt, Deko hinzugefügt, Kochrezepte angepasst 2025-05-14 16:36:42 +02:00

fmod

flux's mod boilerplate

what?

i use this to create a common basic API that all of my mods share. it grabs a lot of mod metadata from e.g. mod.conf and settingtypes.txt and automatically makes those values available.

this mod is primarily for my own use, but i'd be elated if other people find it useful. suggestions are welcome, but note that my own patterns come first in any suggested changes. the more mods i create which depend on this (there's over 70 and counting, though only 50 or 60 are released), the harder it will be to change fundamental features. but if i've made major mistake somehow, please let me know sooner rather than later!

public API

  • modname = fmod.create(fork)

    creates the boilerplate.

    fork is an optional parameter for other people to use if they fork a mod.

the api which is created looks like this:

local f = string.format
local modname = minetest.get_current_modname()
local S = minetest.get_translator(modname)
local modpath = minetest.get_modpath(modname)
local mod_conf = Settings(modpath .. DIR_DELIM .. "settingtypes.txt")

modname = {
		modname = modname,
		modpath = modpath,
		title = mod_conf:get("title") or modname,
		description = mod_conf:get("description"),
		author = mod_conf:get("author"),
		license = mod_conf:get("license"),
		version = mod_conf:get("version"),
		fork = fork or "flux",  -- fork is the argument to `fmod.create(fork)`

		S = S,

		has = build_has(mod_conf),  -- this reads mod.conf and creates a set from optional_depends
		settings = get_settings(modname),  -- this reads and parses settingtypes.txt, and populates w/ values from
                                           -- minetest.conf, or otherwise the defaults specified in settingtypes.txt

		check_version = function(required)
			assert(mod_conf:get("version") >= required, f("%s requires a newer version of %s; please update it", minetest.get_current_modname(), modname))
		end,

        check_minetest_version = function(major, minor, patch, other, reason)
            assert(..., "check that the required version of the game engine is present. \"other\" is reserved for " ..
                "future use, once i figure out how to deal w/ engine forks."
            )
        end,

		log = function(level, messagefmt, ...)
			return minetest.log(level, f("[%s] %s", modname, f(messagefmt, ...)))
		end,

        chat_send_player = function(player, messagefmt, ...)
            minetest.chat_send_player(player, f("[%s] %s", modname, S(messagefmt, ...)))
        end,

        chat_send_all = function(message, ...)
            minetest.chat_send_all(f("[%s] %s", modname, S(message, ...)))
        end,

		dofile = function(...)
			return dofile(table.concat({modpath, ...}, DIR_DELIM) .. ".lua")
		end,

        async_dofile = function(...) -- load a file into the async environment
			return minetest.register_async_dofile(table.concat({ modpath, ... }, DIR_DELIM) .. ".lua")
        end,
}

note that fmod itself is created w/ this same boilerplate; therefore, i can indicate that certain mods require an up-to-date version of fmod to operate.