From 7e5dc6c374b71be815ae8e3e73b6c0590a94dce7 Mon Sep 17 00:00:00 2001 From: webdesigner97 Date: Sat, 5 Jul 2014 22:45:46 +0200 Subject: [PATCH] Add a minetest_game API documentation --- game_api.txt | 200 +++++++++++++++++++++++++++++++++++++++++++ mods/xpanes/init.lua | 8 +- 2 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 game_api.txt diff --git a/game_api.txt b/game_api.txt new file mode 100644 index 00000000..b7d87616 --- /dev/null +++ b/game_api.txt @@ -0,0 +1,200 @@ +minetest_game API +====================== +GitHub Repo: https://github.com/BlockMen/minetest_game + +Introduction +------------ +The minetest_game gamemode offers multiple new possibilities in addition to Minetest's built-in API, allowing you to +add new plants to farming mod, buckets for new liquids, new stairs and custom panes. +For information on the Minetest API, visit https://github.com/minetest/minetest/blob/master/doc/lua_api.txt +Please note: + [XYZ] refers to a section the Minetest API + [#ABC] refers to a section in this document + ^ Explanation for line above + +Bucket API +---------- +The bucket API allows registering new types of buckets for non-default liquids. + + bucket.register_liquid( + "default:lava_source", -- Source node name + "default:lava_flowing", -- Flowing node name + "bucket:bucket_lava", -- Name to be used for bucket + "bucket_lava.png", -- Bucket texture (for wielditem and inventory_image) + "Lava Bucket" -- Bucket description + ) + +Doors API +--------- +The doors mod allows modders to register custom doors. + + doors:register_door(name, def) + ^ Notice the ":" instaed of "."! + ^ name: "Door name" + ^ def: See [#Door definition] + +#Door definition +---------------- +{ + description = "Door description", + inventory_image = "mod_door_inv.png", + groups = {group = 1}, + tiles_bottom: [Tile definition], + ^ the tiles of the bottom part of the door {front, side} + tiles_top: [Tile definition], + ^ the tiles of the bottom part of the door {front, side} + node_box_bottom = regular nodebox, see [Node boxes], OPTIONAL, + node_box_top = regular nodebox, see [Node boxes], OPTIONAL, + selection_box_bottom = regular nodebox, see [Node boxes], OPTIONAL, + selection_box_top = regular nodebox, see [Node boxes], OPTIONAL, + only_placer_can_open = true/false, + ^ If true, only placer can open the door (locked for others) +} + +Farming API +----------- +The farming API allows you to easily register plants and hoes. + +farming.register_hoe(name, hoe definition) + -> Register a new hoe, see [#hoe definition] + +farming.register_plant(name, Plant definition) + -> Register a new growing plant, see [#Plant definition] + +#Hoe Definition +--------------- +{ + description = "", -- Description for tooltip + inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image + max_uses = 30, -- Uses until destroyed + recipe = { -- Craft recipe + {"air", "air", "air"}, + {"", "group:stick"}, + {"", "group:stick"}, + } +} + +#Plant definition +----------------- +{ + description = "", -- Description of seed item + inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image + steps = 8, -- How many steps the plant has to grow, until it can be harvested + ^ Always provide a plant texture for ech step, format: modname_plantname_i.png (i = stepnumber) + minlight = 13, -- Minimum light to grow + maxlight = LIGHT_MAX -- Maximum light to grow +} + +Stairs API +---------- +The stairs API lets you register stairs and slabs and ensures that they are registered the same way as those +delivered with minetest_game, to keep them compatible with other mods. + +stairs.register_stair(subname, recipeitem, groups, images, description, sounds) + -> Registers a stair. + -> subname: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname" + -> recipeitem: Item used in the craft recipe, e.g. "default:cobble" + -> groups: see [Known damage and digging time defining groups] + -> images: see [Tile definition] + -> description: used for the description field in the stair's definition + -> sounds: see [#Default sounds] + +stairs.register_slab(subname, recipeitem, groups, images, description, sounds) + -> Registers a slabs + -> subname: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname" + -> recipeitem: Item used in the craft recipe, e.g. "default:cobble" + -> groups: see [Known damage and digging time defining groups] + -> images: see [Tile definition] + -> description: used for the description field in the stair's definition + -> sounds: see [#Default sounds] + +stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds) + -> A wrapper for stairs.register_stair and stairs.register_slab + -> Uses almost the same arguments as stairs.register_stair + -> desc_stair: Description for stair node + -> desc_slab: Description for slab node + +Xpanes API +---------- +Creates panes that automatically connect to each other + +xpanes.register_pane(subname, def) + -> subname: used for nodename. Result: "xpanes:subname_{1..16}" + -> def: See [#Pane definition] + +#Pane definition +---------------- +{ + textures = {"texture_Bottom_top", "texture_left_right", "texture_front_back"}, + ^ More tiles aren't supported + groups = {group = rating}, + ^ Uses the known node groups, see [Known damage and digging time defining groups] + sounds = SoundSpec, + ^ See [#Default sounds] + recipe = {{"","","","","","","","",""}}, + ^ Recipe field only + on_construct = function(pos) + update_pane(pos, "pane") + end, + ^ Required to handle rotation correctly +} + +Default sounds +-------------- +Sounds inside the default table can be used within the sounds field of node definitions. + +default.node_sound_defaults() +default.node_sound_stone_defaults() +default.node_sound_dirt_defaults() +default.node_sound_sand_defaults() +default.node_sound_wood_defaults() +default.node_sound_leaves_defaults() +default.node_sound_glass_defaults() + +Player API +---------- +The player API can register player models and update the player's appearence + +default.player_register_model(name, def) +^ Register a new model to be used by players. + -> name: model filename such as "character.x", "foo.b3d", etc. + -> def: See [#Model definition] + +default.registered_player_models[name] +^ Get a model's definition + -> see [#Model definition] + +default.player_set_model(player, model_name) +^ Change a player's model + -> player: PlayerRef + -> model_name: model registered with player_register_model() + +default.player_set_animation(player, anim_name [, speed]) +^ Applies an animation to a player + -> anim_name: name of the animation. + -> speed: frames per second. If nil, default from the model is used + +default.player_set_textures(player, textures) +^ Sets player textures + -> player: PlayerRef + -> textures: array of textures + ^ If is nil, the default textures from the model def are used + +default.player_get_animation(player) +^ Returns a table containing fields "model", "textures" and "animation". +^ Any of the fields of the returned table may be nil. + -> player: PlayerRef + +Model Definition +---------------- +{ + animation_speed = 30, -- Default animation speed, in FPS. + textures = {"character.png", }, -- Default array of textures. + visual_size = {x=1, y=1,}, -- Used to scale the model. + animations = { + -- = { x=, y=, }, + foo = { x= 0, y=19, }, + bar = { x=20, y=39, }, + -- ... + }, +} diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua index 92d9bfce..60ec68c1 100644 --- a/mods/xpanes/init.lua +++ b/mods/xpanes/init.lua @@ -1,3 +1,5 @@ +xpanes = {} + local function rshift(x, by) return math.floor(x / 2 ^ by) end @@ -61,7 +63,7 @@ local sb_full_blocks = { {-0.06, -0.5, -0.5, 0.06, 0.5, 0.5} } --register panes and bars -local function register_panes(name, def) +function xpanes.register_pane(name, def) for i = 1, 15 do local need = {} local cnt = 0 @@ -122,7 +124,7 @@ end minetest.register_on_placenode(update_nearby) minetest.register_on_dignode(update_nearby) -register_panes("pane", { +xpanes.register_pane("pane", { description = "Glass Pane", tiles = {"xpanes_space.png"}, drawtype = "airlike", @@ -147,7 +149,7 @@ register_panes("pane", { } }) -register_panes("bar", { +xpanes.register_pane("bar", { description = "Iron bar", tiles = {"xpanes_space.png"}, drawtype = "airlike",