yl_api_nodestages
Purpose
This mod is a library which brings various nodestage-related functions.
Download
Get it from https://gitea.your-land.de/your-land/yl_api_nodestages
Installation
- Copy the "yl_api_nodestages" folder to your mod directory.
- Enable the mod in your world.mt file.
Configuration
yl_api_nodestages.debug = false
Set to true to enable debug mode
yl_api_nodestages.run_lbm = true
Set to true to enable the timer restart lbm, set to false to disable it
Usage
This mod can be used in singleplayer and multiplayer. It comes with no direct content but exposes functions you can use in your mod.
Data structure
One stage consists of at least the stage_name, next_stages and duration.
local stage = {
{
stage_name = "modname:nodename", -- required, string, nodename to attach this stage to, must not exist previously
next_stages = "modname:same_or_other_nodename", -- required, string or table (see below), if missing last stage is assumed
-- OR
next_stages = { -- required if not last stage, table format
{
"modname:same_or_other_nodename", -- required, string, target nodename must exist
50, -- optional, number, chance for the node to switch to this target, defaults to 1
{ can_set = mymod.optional_can_set_function, more_functions = ... }, -- optional, table, callback table of known keys and function values
{ param1 = 90, param2 = 107, ... } -- optional, table, metadata table of known keys and whatever values they want
},
{ "modname:same_or_other_nodename"}, -- as above, but without any optional fields
{ "other_modname:their_nodename"} -- as above, but targets a node from different mod
},
duration = 120, -- required, number, fixed duration of stage in seconds, if missing last stage is assumed
tiles = {"modname_nodename_texturename.png", ... }, -- required, table, table of tiles
description = "Node description", -- required, string, node description
-- Optional "Node definition" aka "Used by minetest.register_node"
node_definition = {
drawtype = "normal",
...
},
overwrite = false, -- optional, boolean, false breaks during registration if the node has on_timer or on_construct. true overwrites regardless
restart = true, -- optional, boolean, true restarts the nodetimer via lbm, false does not
_previous = {}, -- DO NOT USE, this holds the history to be accessed by delete_stage only
_version = 1, -- DO NOT USE, this holds the version of the datastructure, will increase when datastructure changes
}
}
A list of {stage}
sit in a table stages
:
local stages = {
{stage},
{stage},
...
}
Modmakers
Use the following public functions related to nodestages.
yl_api_nodestages.get_stage(modname, nodename)
Gets a table with the values of the stage attached to the given modname:nodename
. Returns true, {stage}
or false, errormessage
if an error occurred.
yl_api_nodestages.create_stagenode(stage)
Creates the node without attaching the stage. Returns true
if the node was successfully created. Returns false, "errormessage"
if not.
yl_api_nodestages.add_stage(stage)
Attaches a stage to an existing node. Returns true
if the stage was successfully attached. Only successful if the stage does not yet exist. Returns false, "errormessage"
if not.
yl_api_nodestages.overwrite_stage(stage)
Attaches a stage to an existing node. Returns true
if the stage was successfully attached, regardless whether the stage already exist. Returns false, "errormessage"
if not.
yl_api_nodestages.rollback_stage(modname, nodename)
Rolls a stage of an existing node back to the stage before the last overwrite. Returns true
if the stage was successfully rolled back. Returns false, "errormessage"
if not.
yl_api_nodestages.delete_stage(modname, nodename)
Deletes the stage (including cached previous stages) from an existing node. Returns true
if the stage was successfully removed. Returns false, "errormessage"
if not.
yl_api_nodestages.register_stage(stage)
Registers a single stage
, calls create_stage and add_stage. Returns true
if the stage was successfully registered. Returns false, "errormessage"
if not.
yl_api_nodestages.register_stages(stages)
Registers all given stages
, calls create_stage and add_stage. Returns true, good, bad, total, {}
if all stages were registered successfully. Returns false, good, bad, total, {reasons}
if at least one stage was not successfully registered.
yl_api_nodestages.validate_all_stages()
Validates all stages currently attached to any node. Returns true, good, bad, total, {}
if all stages were validated successfully. Returns false, good, bad, total, {reasons}
if at least one stage was not successfully validated.
Limitations
- No randomized duration except by registering the same stage as a next_stage again
- Core nodes cannot have stages, examples are
air
andignore
- Unclear: About 1 Million active stages may cause
Server::ActiveObjectMgr::addActiveObjectRaw(): no free id available
Alternatives
- Implement nodetimers, ABMs or LBMs
Supported versions
If you use yl_api_nodestages, but something is wrong, please file a bug. PRs also welcome.
There is no reason to believe it doesn't work anywhere, but you never know.
Allied projects
Uninstall
Remove it from your mod folder or deactivate it in your world.mt
Mods that depend on it will cease to work, if the mod is removed without proper replacement.
License
See LICENSE.md
- Code MIT Developername
- Screenshot CC0 Styxcolor
Thank you
- Original canned_food author: https://github.com/h-v-smacker
- AspireMint
- Styxcolor