Renames mod to yl_canned_food_mtg and adds documentation

This commit is contained in:
AliasAlreadyTaken 2024-07-13 22:12:46 +02:00
parent 133a306e42
commit 4aaa9b3f65
19 changed files with 149 additions and 128 deletions

View File

@ -1,8 +1,8 @@
unused_args = false
allow_defined_top = true
allow_defined_top = false
globals = {
"yl_template"
"yl_canned_food_mtg"
}
read_globals = {

View File

@ -1,12 +1,12 @@
# License
Copyright (c) 2024 Developername, Styxcolor
Copyright (c) 2024 AliasAlreadyTaken, Styxcolor
Code:
* [MIT](https://gitea.your-land.de/your-land/yl_template/src/LICENSE-MIT) Developername
* [MIT](https://gitea.your-land.de/your-land/yl_canned_food_mtg/src/LICENSE-MIT) AliasAlreadyTaken
Media:
* screenshot.png [CC0](https://gitea.your-land.de/your-land/yl_template/src/LICENSE-CC0) Styxcolor
* screenshot.png [CC0](https://gitea.your-land.de/your-land/yl_canned_food_mtg/src/LICENSE-CC0) Styxcolor

View File

@ -1,56 +1,63 @@
# yl_template
# yl_canned_food_mtg
## Purpose
This mod is not meant to bring functionality by itself, but to serve as a template you can base your mod on. Remove the components you do not want and expand on those you want.
This mod brings crafting recipes, nutritional values and unified inventory integration for yl_canned_food
## Download
Get it from https://gitea.your-land.de/your-land/yl_template
Get it from https://gitea.your-land.de/your-land/yl_canned_food_mtg
## Dependencies
`Delete the Dependency section if your mod has no dependencies`
See [mod.conf](mod.conf)
* [modname_of_dependency](https://gitea.your-land.de/link/to/git/of/dependency)
* [yl_canned_food](https://gitea.your-land.de/your-land/yl_canned_food)
## Installation
1. Copy the "yl_template" folder to your mod directory.
1. Copy the "yl_canned_food_mtg" folder to your mod directory.
2. Make sure the [dependencies](#dependencies) are satisfied, if any.
3. Enable the mod in your world.mt file.
## Configuration
```
yl_template.debug = false
yl_canned_food_mtg.debug = false
```
Set to true to enable debug mode
```
yl_template.save_path
yl_canned_food_mtg.enable_recipes = true
```
Set this to where in the worldfolder you want the JSON files stored.
Set this to true if you want to enable recipes. Set this to false if you create recipes of your own in a different mod.
```
yl_canned_food_mtg.enable_eat = true
```
Set this to true if you want to enable eating. Set this to false if you create item_eat integration of your own in a different mod.
```
yl_canned_food_mtg.enable_unified_inventory = true
```
Set this to true if you want to enable unified_inventory integration
## Usage
This mod targets `[servers|singleplayer|...]`, but should work in `[[servers|singleplayer|...]`, too. It comes with no direct content but exposes functions you can use in your mod.
### Chatcommands
### Modmakers
Use the following public functions to `[achieve your goals]`
This mod can be used in singleplayer and multiplayer. It adds crafting recipes, nutritional values and unified inventory integration for minetest_game. If your game is a different one, use their canned_food integration instead.
## Limitations
* No integrations for other games than those which are based on [minetest_game](https://github.com/minetest/minetest_game)
## Alternatives
* [canned_food](https://github.com/h-v-smacker/canned_food)
## Supported versions
If you use yl_template, but something is wrong, please [file a bug](https://gitea.your-land.de/your-land/yl_template/issues/new). PRs also welcome.
If you use yl_canned_food_mtg, but something is wrong, please [file a bug](https://gitea.your-land.de/your-land/yl_canned_food_mtg/issues/new). PRs also welcome.
There is no reason to believe it doesn't work anywhere, but you never know.
@ -66,11 +73,12 @@ Mods that depend on it will cease to work, if the mod is removed without proper
## License
[Shorthand of your chosen license: MIT, LGPLv3+, GPLv3+, AGPL, ...]. Please choose one of the major license that is compatible with as much of the MT universe over some obscure and incompatible license. If you use the screenshot.png, keep Styxcolor in there because she made that screenshot.png, if you add your own, replace the line with whoever made it. Example for MIT and CC0:
See [LICENSE.md](https://gitea.your-land.de/your-land/yl_canned_food_mtg/src/LICENSE.md)
See [LICENSE.md](https://gitea.your-land.de/your-land/yl_template/src/LICENSE.md)
* Code MIT Developername
* Code MIT AliasAlreadyTaken
* Textures CC0 Styxcolor
* Screenshot CC0 Styxcolor
## Thank you
* Styxcolor

14
api.lua
View File

@ -4,31 +4,31 @@
-- they expect as parameters and what types and values they return.
-- If you ever change those, consider adding backwards compatibility,
-- since other mods may rely on them.
function yl_template.some_api_call(target, message, color)
function yl_canned_food_mtg.some_api_call(target, message, color)
if (type(target) ~= "string") then
return false, yl_template.t("error_not_a_string", "target")
return false, yl_canned_food_mtg.t("error_not_a_string", "target")
end
if (minetest.get_player_by_name(target) == nil) then
return false, yl_template.t("error_player_not_online", target)
return false, yl_canned_food_mtg.t("error_player_not_online", target)
end
if (type(message) ~= "string") then
return false, yl_template.t("error_not_a_string", "message")
return false, yl_canned_food_mtg.t("error_not_a_string", "message")
end
-- is_color(color) does not exist, you need to implement it if you want to use it
if (is_color(color) == false) then
return false, yl_template.t("error_not_a_colorspec", "color")
return false, yl_canned_food_mtg.t("error_not_a_colorspec", "color")
end
if (minetest.colorize == nil) then
return false, yl_template.t("error_function_not_available",
return false, yl_canned_food_mtg.t("error_function_not_available",
"minetest.colorize")
end
local message_with_color = minetest.colorize(color, message)
minetest.chat_send_player(target, message_with_color)
return true, yl_template.t("api_sent_x_to_y", message_with_color, target)
return true, yl_canned_food_mtg.t("api_sent_x_to_y", message_with_color, target)
end

View File

@ -1,14 +1,14 @@
local chatcommand_cmd = "admin_example"
local chatcommand_definition = {
params = yl_template.t("chatcommand_admin_parameters"), -- Short parameter description
description = yl_template.t("chatcommand_admin_description"), -- Full description
privs = {[yl_template.settings.admin_priv] = true}, -- Require the "privs" privilege to run
params = yl_canned_food_mtg.t("chatcommand_admin_parameters"), -- Short parameter description
description = yl_canned_food_mtg.t("chatcommand_admin_description"), -- Full description
privs = {[yl_canned_food_mtg.settings.admin_priv] = true}, -- Require the "privs" privilege to run
func = function(name, param)
local success = true
if success then
return true, yl_template.t("chatcommand_admin_success_message")
return true, yl_canned_food_mtg.t("chatcommand_admin_success_message")
else
return false, yl_template.t("chatcommand_admin_fail_message")
return false, yl_canned_food_mtg.t("chatcommand_admin_fail_message")
end
end
-- Called when command is run. Returns boolean success and text output.

View File

@ -1,14 +1,14 @@
local chatcommand_cmd = "player_example"
local chatcommand_definition = {
params = yl_template.t("chatcommand_player_parameters"), -- Short parameter description
description = yl_template.t("chatcommand_player_parameters"), -- Full description
params = yl_canned_food_mtg.t("chatcommand_player_parameters"), -- Short parameter description
description = yl_canned_food_mtg.t("chatcommand_player_parameters"), -- Full description
privs = {privs = true}, -- Require the "privs" privilege to run
func = function(name, param)
local success = true
if success then
return true, yl_template.t("chatcommand_player_parameters")
return true, yl_canned_food_mtg.t("chatcommand_player_parameters")
else
return false, yl_template.t("chatcommand_player_parameters")
return false, yl_canned_food_mtg.t("chatcommand_player_parameters")
end
end
-- Called when command is run. Returns boolean success and text output.

View File

@ -1,2 +1,2 @@
dofile(yl_template.modpath .. "chatcommand_admin.lua")
dofile(yl_template.modpath .. "chatcommand_player.lua")
dofile(yl_canned_food_mtg.modpath .. "chatcommand_admin.lua")
dofile(yl_canned_food_mtg.modpath .. "chatcommand_player.lua")

View File

@ -1,12 +1,12 @@
-- Setting a configuration, switch the order in which the settings shall take precedence. First valid one taken.
yl_template.settings = {}
yl_canned_food_mtg.settings = {}
yl_template.settings.debug = minetest.settings:get_bool("yl_template.debug", false)
yl_canned_food_mtg.settings.debug = minetest.settings:get_bool("yl_canned_food_mtg.debug", false)
yl_template.settings.external_value = "mod_default" or minetest.settings:get("yl_template.external_value") or "default"
yl_canned_food_mtg.settings.external_value = "mod_default" or minetest.settings:get("yl_canned_food_mtg.external_value") or "default"
yl_template.settings.save_path = "yl_template" or minetest.settings:get("yl_template.save_path") or "default"
yl_canned_food_mtg.settings.save_path = "yl_canned_food_mtg" or minetest.settings:get("yl_canned_food_mtg.save_path") or "default"
yl_template.settings.admin_priv = "admin_priv" or minetest.settings:get("yl_template.admin_priv") or "server"
yl_canned_food_mtg.settings.admin_priv = "admin_priv" or minetest.settings:get("yl_canned_food_mtg.admin_priv") or "server"

View File

@ -2,7 +2,7 @@ local timer = 0
local gs = function(dtime)
timer = timer + dtime
if timer <= yl_template.config.interval then
if timer <= yl_canned_food_mtg.config.interval then
return
end
timer = 0

View File

@ -1,7 +1,7 @@
yl_template.information = {}
yl_template.information.version = "0.0.1"
yl_template.information.author = "AliasAlreadyTaken"
yl_template.information.license = "MIT"
yl_template.information.name = "yl_template" -- Name of the mod
yl_template.information.source = "https://gitea.your-land.de/your-land/yl_template"
yl_template.information.additional = yl_template.t("information_additional")
yl_canned_food_mtg.information = {}
yl_canned_food_mtg.information.version = "0.0.1"
yl_canned_food_mtg.information.author = "AliasAlreadyTaken"
yl_canned_food_mtg.information.license = "MIT"
yl_canned_food_mtg.information.name = "yl_canned_food_mtg" -- Name of the mod
yl_canned_food_mtg.information.source = "https://gitea.your-land.de/your-land/yl_canned_food_mtg"
yl_canned_food_mtg.information.additional = yl_canned_food_mtg.t("information_additional")

View File

@ -5,27 +5,27 @@
-- Changelog
local mod_start_time = minetest.get_us_time()
minetest.log("action", "[MOD] yl_template loading")
minetest.log("action", "[MOD] yl_canned_food_mtg loading")
yl_template = {}
yl_template.error = {}
yl_template.modname = minetest.get_current_modname()
yl_template.modstorage = minetest.get_mod_storage()
yl_template.modpath = minetest.get_modpath("yl_template") .. DIR_DELIM
yl_template.worldpath = minetest.get_worldpath() .. DIR_DELIM
yl_canned_food_mtg = {}
yl_canned_food_mtg.error = {}
yl_canned_food_mtg.modname = minetest.get_current_modname()
-- yl_canned_food_mtg.modstorage = minetest.get_mod_storage()
yl_canned_food_mtg.modpath = minetest.get_modpath("yl_canned_food_mtg") .. DIR_DELIM
-- yl_canned_food_mtg.worldpath = minetest.get_worldpath() .. DIR_DELIM
dofile(yl_template.modpath .. "texts.lua")
dofile(yl_template.modpath .. "information.lua")
dofile(yl_template.modpath .. "config.lua")
dofile(yl_template.modpath .. "setup.lua")
dofile(yl_template.modpath .. "privs.lua")
dofile(yl_template.modpath .. "internal.lua")
dofile(yl_template.modpath .. "api.lua")
dofile(yl_template.modpath .. "initialize.lua")
dofile(yl_template.modpath .. "distinct_feature.lua")
dofile(yl_template.modpath .. "overwrite_feature.lua")
dofile(yl_template.modpath .. "globalsteps.lua")
dofile(yl_template.modpath .. "chatcommands.lua")
dofile(yl_canned_food_mtg.modpath .. "texts.lua")
dofile(yl_canned_food_mtg.modpath .. "information.lua")
dofile(yl_canned_food_mtg.modpath .. "config.lua")
-- dofile(yl_canned_food_mtg.modpath .. "setup.lua")
-- dofile(yl_canned_food_mtg.modpath .. "privs.lua")
dofile(yl_canned_food_mtg.modpath .. "internal.lua")
-- dofile(yl_canned_food_mtg.modpath .. "api.lua")
dofile(yl_canned_food_mtg.modpath .. "initialize.lua")
dofile(yl_canned_food_mtg.modpath .. "features.lua")
-- dofile(yl_canned_food_mtg.modpath .. "overwrite_feature.lua")
-- dofile(yl_canned_food_mtg.modpath .. "globalsteps.lua")
-- dofile(yl_canned_food_mtg.modpath .. "chatcommands.lua")
local mod_end_time = (minetest.get_us_time() - mod_start_time) / 1000000
minetest.log("action", "[MOD] yl_template loaded in [" .. mod_end_time .. "s]")
minetest.log("action", "[MOD] yl_canned_food_mtg loaded in [" .. mod_end_time .. "s]")

View File

@ -1,9 +1,9 @@
-- Use this file to initialize variables once after server start and check everything is in place
local function run_each_serverstart()
yl_template.data = {}
--minetest.on_mods_loaded(0.0, yl_template.on_mods_loaded)
--minetest.after(0.0, yl_template.after)
yl_canned_food_mtg.data = {}
--minetest.on_mods_loaded(0.0, yl_canned_food_mtg.on_mods_loaded)
--minetest.after(0.0, yl_canned_food_mtg.after)
end
run_each_serverstart()

View File

@ -1,22 +1,22 @@
-- The functions and variables in this file are only for use in the mod itself.
-- Those that do real work should be local and wrapped in public functions
local function log(text)
local logmessage = yl_template.t("log_prefix", yl_template.modname, text)
if yl_template.settings.debug then minetest.log("action", logmessage) end
local logmessage = yl_canned_food_mtg.t("log_prefix", yl_canned_food_mtg.modname, text)
if yl_canned_food_mtg.settings.debug then minetest.log("action", logmessage) end
return logmessage
end
function yl_template.log(text) return log(text) end
function yl_canned_food_mtg.log(text) return log(text) end
local function get_savepath()
local savepath = yl_template.worldpath .. yl_template.settings.save_path
log(yl_template.t("log_prefix", dump(savepath)))
local savepath = yl_canned_food_mtg.worldpath .. yl_canned_food_mtg.settings.save_path
log(yl_canned_food_mtg.t("log_prefix", dump(savepath)))
return savepath
end
local function get_filepath(filename)
local path_to_file = get_savepath() .. DIR_DELIM .. filename .. ".json"
log(yl_template.t("get_filepath", dump(filename), dump(path_to_file)))
log(yl_canned_food_mtg.t("get_filepath", dump(filename), dump(path_to_file)))
return path_to_file
end
@ -32,14 +32,14 @@ end
local function load_json(path)
local file = io.open(path, "r")
if not file then
return false, yl_template.t("error_cannot_open_file", dump(path))
return false, yl_canned_food_mtg.t("error_cannot_open_file", dump(path))
end
local content = file:read("*all")
file:close()
if not content then
return false, yl_template.t("error_cannot_read_file", dump(path))
return false, yl_canned_food_mtg.t("error_cannot_read_file", dump(path))
end
return true, minetest.parse_json(content)
@ -47,8 +47,8 @@ end
-- Public functions wrap the private ones, so they can be exchanged easily
function yl_template.load(filename, ...) return load_json(filename, ...) end
function yl_canned_food_mtg.load(filename, ...) return load_json(filename, ...) end
function yl_template.save(filename, content, ...)
function yl_canned_food_mtg.save(filename, content, ...)
return save_json(filename, content, ...)
end

View File

@ -1,6 +1,5 @@
name = yl_template
description = A template with best practices
depends = default
optional_depends = moreblocks
name = yl_canned_food_mtg
description = Craft and eat yl_canned_food in mtg
optional_depends = default
author = AliasAlreadyTaken
title = Template
title = Canned Food MTG

View File

@ -1,6 +1,6 @@
local priv_name = "example"
local priv_definition = {
description = yl_template.t("privs_example_description"),
description = yl_canned_food_mtg.t("privs_example_description"),
-- Privilege description
give_to_singleplayer = false,
@ -13,27 +13,27 @@ local priv_definition = {
on_grant = function(name, granter_name)
-- logging
if (type(granter_name) ~= "string") then
local errormessage = yl_template.t("error_name_not_found",
local errormessage = yl_canned_food_mtg.t("error_name_not_found",
dump(granter_name))
yl_template.log(errormessage)
yl_canned_food_mtg.log(errormessage)
return false, errormessage
end
if not name then
local errormessage = yl_template.t("error_name_not_found",
local errormessage = yl_canned_food_mtg.t("error_name_not_found",
dump(name))
yl_template.log(errormessage)
yl_canned_food_mtg.log(errormessage)
return false, errormessage
end
if not priv_name then
local errormessage = yl_template.t("error_priv_not_found",
local errormessage = yl_canned_food_mtg.t("error_priv_not_found",
dump(priv_name))
yl_template.log(errormessage)
yl_canned_food_mtg.log(errormessage)
return false, errormessage
end
local text = yl_template.t("privs_example_grant_logmessage",
local text = yl_canned_food_mtg.t("privs_example_grant_logmessage",
dump(granter_name), dump(priv_name),
dump(name))
yl_template.log(text)
yl_canned_food_mtg.log(text)
end,
-- Called when given to player 'name' by 'granter_name'.
-- 'granter_name' will be nil if the priv was granted by a mod.
@ -41,27 +41,27 @@ local priv_definition = {
on_revoke = function(name, revoker_name)
-- logging
if (type(revoker_name) ~= "string") then
local errormessage = yl_template.t("error_name_not_found",
local errormessage = yl_canned_food_mtg.t("error_name_not_found",
dump(revoker_name))
yl_template.log(errormessage)
yl_canned_food_mtg.log(errormessage)
return false, errormessage
end
if not name then
local errormessage = yl_template.t("error_name_not_found",
local errormessage = yl_canned_food_mtg.t("error_name_not_found",
dump(name))
yl_template.log(errormessage)
yl_canned_food_mtg.log(errormessage)
return false, errormessage
end
if not priv_name then
local errormessage = yl_template.t("error_priv_not_found",
local errormessage = yl_canned_food_mtg.t("error_priv_not_found",
dump(priv_name))
yl_template.log(errormessage)
yl_canned_food_mtg.log(errormessage)
return false, errormessage
end
local text = yl_template.t("privs_example_revoke_logmessage",
local text = yl_canned_food_mtg.t("privs_example_revoke_logmessage",
dump(revoker_name), dump(priv_name),
dump(name))
yl_template.log(text)
yl_canned_food_mtg.log(text)
end
-- Called when taken from player 'name' by 'revoker_name'.
-- 'revoker_name' will be nil if the priv was revoked by a mod.

View File

@ -1 +1 @@
dofile(yl_template.modpath .. "priv_example.lua")
dofile(yl_canned_food_mtg.modpath .. "priv_example.lua")

View File

@ -3,9 +3,19 @@
# Debug
# Set this to true to enable debug mode, it will output some more values to log
# Optional, default is false
yl_template.debug (Debug mode) bool false
yl_canned_food_mtg.debug (Debug mode) bool false
# First line: Name the settings
# Second line: Say what it does, how to use it, what it changes
# Third line: Is it optional? What's the default value? Does it expect a certain set of values?
yl_template.external_value (Description of the setting) string "default_value"
# Enable recipes
# Set this to true if you want to enable recipes. Set this to false if you create recipes of your own in a different mod.
# Optional, default is true
yl_canned_food_mtg.enable_recipes (Enable recipes) bool true
# Enable eat
# Set this to true if you want to enable eating. Set this to false if you create item_eat integration of your own in a different mod.
# Optional, default is true
yl_canned_food_mtg.enable_eat (Debug mode) bool true
# Enable unified_inventory integration
Set this to true if you want to enable unified_inventory integration. Set this to false to disable the integration.
# Optional, default is true
yl_canned_food_mtg.enable_unified_inventory (Enable unified_inventory integration) bool true

View File

@ -3,10 +3,10 @@
-- this code not to run again
local mkdir = minetest.mkdir
local save_path = yl_template.settings.save_path
local save_path = yl_canned_food_mtg.settings.save_path
local function run_once()
local path = yl_template.worldpath .. DIR_DELIM .. save_path
local path = yl_canned_food_mtg.worldpath .. DIR_DELIM .. save_path
local file = io.open(path, "r")
if not file then
mkdir(path)

View File

@ -1,19 +1,23 @@
local S = minetest.get_translator(yl_template.modname)
local S = minetest.get_translator(yl_canned_food_mtg.modname)
local texts = {}
function yl_template.t(key, ...) return S(texts[key], ...) or "" end
--function yl_canned_food_mtg.t(key, ...) return S(texts[key], ...) or "" end
function yl_canned_food_mtg.t(key, ...)
if (texts[key] == nil) then
minetest.log("warning","key " .. (key or "") .. " does not exist")
return key
end
return S(texts[key], ...) or ""
end
-- Fixed texts
texts["log_prefix"] = "[MOD] @1 : @2"
texts["get_savepath"] = "get_savepath : @1"
texts["get_filepath"] = "get_filepath : @1"
-- Translateable texts
texts["information_additional"] = "Additional information"
texts["information_additional"] = "Craft and eat yl_canned_food in mtg"
texts["chatcommand_admin_description"] = "Admin Chatcommand description"
texts["chatcommand_admin_parameters"] = "<name> <privilege>"