forked from VoxeLibre/VoxeLibre
Add documentation (README.md, API.md)
This commit is contained in:
parent
a66c35a9ea
commit
49b6d09985
|
@ -0,0 +1,209 @@
|
||||||
|
# `mcl_chests` API
|
||||||
|
|
||||||
|
## `mcl_chests.register_chest(basename, definition)`
|
||||||
|
|
||||||
|
This function allows for simple chest registration, used by both regular and
|
||||||
|
trapped chests.
|
||||||
|
|
||||||
|
* `basename` is a string that will be concatenated to form full nodenames for
|
||||||
|
chests, for example `"mcl_chests:basename_small"`.
|
||||||
|
* `definition` is a key-value table, with following fields:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
{
|
||||||
|
desc = S("Stone Chest"),
|
||||||
|
-- Equivalent to `description` field of Item/Node definition.
|
||||||
|
-- Will be shown as chest's name in the inventory.
|
||||||
|
|
||||||
|
title = {
|
||||||
|
small = S("Stone Chest") -- the same as `desc` if not specified
|
||||||
|
double = S("Large Stone Chest") -- defaults to `"Large " .. desc`
|
||||||
|
}
|
||||||
|
-- These will be shown when opening the chest (in formspecs).
|
||||||
|
|
||||||
|
longdesc = S(
|
||||||
|
"Stone Chests are containers which provide 27 inventory slots. Stone Chests can be turned into" ..
|
||||||
|
"large stone chests with double the capacity by placing two stone chests next to each other."
|
||||||
|
),
|
||||||
|
usagehelp = S("To access its inventory, rightclick it. When broken, the items will drop out."),
|
||||||
|
tt_help = S("27 inventory slots") .. "\n" .. S("Can be combined to a large stone chest"),
|
||||||
|
-- Equivalent to `_doc_items_longdesc`, `_doc_items_usagehelp` and
|
||||||
|
-- `_tt_help` fields of Item/Node definition. Shown in the tooltip and wiki.
|
||||||
|
|
||||||
|
tiles = {
|
||||||
|
small = { "vl_stone_chests_small.png" },
|
||||||
|
double = { "vl_stone_chests_double.png" },
|
||||||
|
inv = {
|
||||||
|
"vl_stone_chests_top.png",
|
||||||
|
"vl_stone_chests_bottom.png",
|
||||||
|
"vl_stone_chests_right.png",
|
||||||
|
"vl_stone_chests_left.png",
|
||||||
|
"vl_stone_chests_back.png",
|
||||||
|
"vl_stone_chests_front.png"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- `small` and `double` fields contain the textures that will be applied to
|
||||||
|
-- chest entities.
|
||||||
|
-- `inv` field contains table of textures (6 in total, for each cube side),
|
||||||
|
-- that will be used to render the chest "node" in the inventory.
|
||||||
|
|
||||||
|
groups = {
|
||||||
|
pickaxey = 1,
|
||||||
|
stone = 1,
|
||||||
|
material_stone = 1,
|
||||||
|
},
|
||||||
|
-- Equivalent to `groups` field of Item/Node definition. There is some table
|
||||||
|
-- merging occuring internally, but it is purely for entity rendering.
|
||||||
|
|
||||||
|
sounds = {
|
||||||
|
mcl_sounds.node_sound_stone_defaults(), -- defaults to `nil`
|
||||||
|
"vl_stone_chests_sound" -- defaults to `"default_chest"`
|
||||||
|
},
|
||||||
|
-- First value is equivalent to `sounds` field of Item/Node definition.
|
||||||
|
-- Second value is a sound prefix, from which the actual sounds will be
|
||||||
|
-- concatenated (e.g. `vl_stone_chests_sound_open.ogg`). See `api.lua`.
|
||||||
|
|
||||||
|
hardness = 4.0,
|
||||||
|
-- Equivalent to `_mcl_blast_resistance` and `_mcl_hardness` fields of
|
||||||
|
-- Item/Node definition. They are always equal for chests.
|
||||||
|
|
||||||
|
hidden = false,
|
||||||
|
-- Equivalent to `_doc_items_hidden` field of Item/Node definition.
|
||||||
|
|
||||||
|
mesecons = {
|
||||||
|
receptor = {
|
||||||
|
state = mesecon.state.on,
|
||||||
|
rules = mesecon.rules.pplate,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- Equivalent to `mesecons` field of Item/Node definition.
|
||||||
|
|
||||||
|
on_rightclick = function(pos, node, clicker)
|
||||||
|
mcl_util.deal_damage(clicker, 2)
|
||||||
|
end,
|
||||||
|
-- If provided, will be executed at the end of the actual `on_rightclick`
|
||||||
|
-- function of the chest node.
|
||||||
|
-- If `on_rightclick_left` or `on_rightclick_right` are not provided, this
|
||||||
|
-- will also be what is executed for left and right double chest nodes,
|
||||||
|
-- respectively.
|
||||||
|
|
||||||
|
drop = "chest",
|
||||||
|
-- If provided, the chest will not drop itself, but the item of the chest
|
||||||
|
-- with that basename.
|
||||||
|
|
||||||
|
canonical_basename = "chest",
|
||||||
|
-- If provided, the chest will turn into chest with that basename in
|
||||||
|
-- `on_construct`.
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For usage examples, see `chests.lua` and `example.lua`.
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos)`
|
||||||
|
|
||||||
|
This function creates a chest entity based on parameters:
|
||||||
|
|
||||||
|
* `pos` is the position vector.
|
||||||
|
* `node_name` is a string used in initialization data for the entity.
|
||||||
|
* `textures` is the entity textures.
|
||||||
|
* `param2` is a node param2, which then will be converted to entity direction.
|
||||||
|
* `double` is a boolean value for whether the chest is double or not.
|
||||||
|
* `sound_prefix` is a string, from which the actual sounds for the entity will
|
||||||
|
be concatenated.
|
||||||
|
* `mesh_prefix` is the same thing as `sound_prefix`, but for meshes.
|
||||||
|
* `animation_type` is a string that will be used in `set_animation` method of
|
||||||
|
chest entity.
|
||||||
|
* `dir` and `entity_pos` are number and vector values used to get entity info.
|
||||||
|
|
||||||
|
Returned value is either a luaentity, or `nil` if failed (in which case a
|
||||||
|
warning message gets written into the console).
|
||||||
|
|
||||||
|
|
||||||
|
## `find_or_create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos)`
|
||||||
|
|
||||||
|
This function finds an existing entity, or creates one if failed. Parameters:
|
||||||
|
|
||||||
|
* `pos` is the position vector.
|
||||||
|
* `node_name` is a string used in initialization data for the entity.
|
||||||
|
* `textures` is the entity textures.
|
||||||
|
* `param2` is a node param2, which then will be converted to entity direction.
|
||||||
|
* `double` is a boolean value for whether the chest is double or not.
|
||||||
|
* `sound_prefix` is a string, from which the actual sounds for the entity will
|
||||||
|
be concatenated.
|
||||||
|
* `mesh_prefix` is the same thing as `sound_prefix`, but for meshes.
|
||||||
|
* `animation_type` is a string that will be used in `set_animation` method of
|
||||||
|
chest entity.
|
||||||
|
* `dir` and `entity_pos` are number and vector values used to get entity info.
|
||||||
|
|
||||||
|
Returned value is either a luaentity, or `nil` if failed (in which case a
|
||||||
|
warning message gets written into the console).
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.no_rotate`
|
||||||
|
|
||||||
|
This function is equivalent to `screwdriver.disallow` and is used when a chest
|
||||||
|
can't be rotated, and is applied in `on_rotate` field of Node definition.
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.simple_rotate(pos, node, user, mode, new_param2)`
|
||||||
|
|
||||||
|
This function allows for simple rotation with the entity being affected as well,
|
||||||
|
and is applied in `on_rotate` field of Node definition.
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.open_chests`
|
||||||
|
|
||||||
|
This table contains all currently open chests, indexed by player name.
|
||||||
|
|
||||||
|
`nil` if player is not using a chest, and `{ pos = <chest node position> }`
|
||||||
|
otherwise (where position is a vector value).
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.protection_check_move(pos, from_list, from_index, to_list, to_index, count, player)`
|
||||||
|
|
||||||
|
This function is called in `allow_metadata_inventory_move` field of Node
|
||||||
|
definition.
|
||||||
|
|
||||||
|
## `mcl_chests.protection_check_put_take(pos, listname, index, stack, player)`
|
||||||
|
|
||||||
|
This function is called in `allow_metadata_inventory_put` and
|
||||||
|
`allow_metadata_inventory_take` fields of Node definition.
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.player_chest_open(player, pos, node_name, textures, param2, double, sound, mesh, shulker)`
|
||||||
|
|
||||||
|
This function opens a chest based on parameters:
|
||||||
|
|
||||||
|
* `player` is an ObjectRef.
|
||||||
|
* `pos` is the position vector.
|
||||||
|
* `node_name` is a string used in initialization data for the entity.
|
||||||
|
* `textures` is the entity textures.
|
||||||
|
* `param2` is a node param2, which then will be converted to entity direction.
|
||||||
|
* `double` is a boolean value for whether the chest is double or not.
|
||||||
|
* `sound` is a prefix string, from which the actual sounds for the entity will
|
||||||
|
be concatenated.
|
||||||
|
* `mesh` is the same thing as `sound`, but for meshes.
|
||||||
|
* `shulker` is a boolean value for whether the chest is a shulker or not.
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.player_chest_close(player)`
|
||||||
|
|
||||||
|
This function has to be called when a player closes a chest.
|
||||||
|
|
||||||
|
* `player` is an ObjectRef.
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.chest_update_after_close(pos)`
|
||||||
|
|
||||||
|
This function is called when a chest is closed by `player_chest_close`.
|
||||||
|
|
||||||
|
* `pos` is the chest's position vector.
|
||||||
|
|
||||||
|
|
||||||
|
## `mcl_chests.is_not_shulker_box(stack)`
|
||||||
|
|
||||||
|
This function checks for whether `stack` is a shulker box, and returns `false`
|
||||||
|
if it is. Used internally to disallow putting shulker boxes into shulker boxes.
|
||||||
|
|
||||||
|
* `stack` is an ItemStack.
|
|
@ -0,0 +1,19 @@
|
||||||
|
# `mcl_chests`
|
||||||
|
|
||||||
|
This mod adds normal and large chests, trapped chests, ender chests and
|
||||||
|
shulkers, providing an API for mods to register their own chests.
|
||||||
|
|
||||||
|
The API is documented in `API.md`.
|
||||||
|
|
||||||
|
|
||||||
|
## License of source code
|
||||||
|
|
||||||
|
Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com>\
|
||||||
|
Copyright (C) 2024 rudzik8, Mikita Wiśniewski <rudzik8@protonmail.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
http://www.gnu.org/licenses/lgpl-2.1.html
|
|
@ -2,7 +2,6 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
local F = minetest.formspec_escape
|
local F = minetest.formspec_escape
|
||||||
local C = minetest.colorize
|
local C = minetest.colorize
|
||||||
local get_double_container_neighbor_pos = mcl_util.get_double_container_neighbor_pos
|
local get_double_container_neighbor_pos = mcl_util.get_double_container_neighbor_pos
|
||||||
local trapped_chest_mesecons_rules = mesecon.rules.pplate
|
|
||||||
|
|
||||||
local chestusage = S("To access its inventory, rightclick it. When broken, the items will drop out.")
|
local chestusage = S("To access its inventory, rightclick it. When broken, the items will drop out.")
|
||||||
|
|
||||||
|
@ -65,7 +64,7 @@ mcl_chests.register_chest("trapped_chest", {
|
||||||
mesecons = {
|
mesecons = {
|
||||||
receptor = {
|
receptor = {
|
||||||
state = mesecon.state.off,
|
state = mesecon.state.off,
|
||||||
rules = trapped_chest_mesecons_rules,
|
rules = mesecon.rules.pplate,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
|
@ -73,7 +72,7 @@ mcl_chests.register_chest("trapped_chest", {
|
||||||
mcl_chests.find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", { "mcl_chests_trapped.png" },
|
mcl_chests.find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", { "mcl_chests_trapped.png" },
|
||||||
node.param2, false, "default_chest", "mcl_chests_chest", "chest")
|
node.param2, false, "default_chest", "mcl_chests_chest", "chest")
|
||||||
:reinitialize("mcl_chests:trapped_chest_on_small")
|
:reinitialize("mcl_chests:trapped_chest_on_small")
|
||||||
mesecon.receptor_on(pos, trapped_chest_mesecons_rules)
|
mesecon.receptor_on(pos, mesecon.rules.pplate)
|
||||||
end,
|
end,
|
||||||
on_rightclick_left = function(pos, node, clicker)
|
on_rightclick_left = function(pos, node, clicker)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
@ -83,23 +82,23 @@ mcl_chests.register_chest("trapped_chest", {
|
||||||
mcl_chests.find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left",
|
mcl_chests.find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left",
|
||||||
mcl_chests.tiles.chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest",
|
mcl_chests.tiles.chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest",
|
||||||
"chest"):reinitialize("mcl_chests:trapped_chest_on_left")
|
"chest"):reinitialize("mcl_chests:trapped_chest_on_left")
|
||||||
mesecon.receptor_on(pos, trapped_chest_mesecons_rules)
|
mesecon.receptor_on(pos, mesecon.rules.pplate)
|
||||||
|
|
||||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "left")
|
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||||
minetest.swap_node(pos_other, { name = "mcl_chests:trapped_chest_on_right", param2 = node.param2 })
|
minetest.swap_node(pos_other, { name = "mcl_chests:trapped_chest_on_right", param2 = node.param2 })
|
||||||
mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules)
|
mesecon.receptor_on(pos_other, mesecon.rules.pplate)
|
||||||
end,
|
end,
|
||||||
on_rightclick_right = function(pos, node, clicker)
|
on_rightclick_right = function(pos, node, clicker)
|
||||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "right")
|
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||||
|
|
||||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_on_right", param2 = node.param2 })
|
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_on_right", param2 = node.param2 })
|
||||||
mesecon.receptor_on(pos, trapped_chest_mesecons_rules)
|
mesecon.receptor_on(pos, mesecon.rules.pplate)
|
||||||
|
|
||||||
minetest.swap_node(pos_other, { name = "mcl_chests:trapped_chest_on_left", param2 = node.param2 })
|
minetest.swap_node(pos_other, { name = "mcl_chests:trapped_chest_on_left", param2 = node.param2 })
|
||||||
mcl_chests.find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left",
|
mcl_chests.find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left",
|
||||||
mcl_chests.tiles.chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest",
|
mcl_chests.tiles.chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest",
|
||||||
"chest"):reinitialize("mcl_chests:trapped_chest_on_left")
|
"chest"):reinitialize("mcl_chests:trapped_chest_on_left")
|
||||||
mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules)
|
mesecon.receptor_on(pos_other, mesecon.rules.pplate)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -126,7 +125,7 @@ mcl_chests.register_chest("trapped_chest_on", {
|
||||||
mesecons = {
|
mesecons = {
|
||||||
receptor = {
|
receptor = {
|
||||||
state = mesecon.state.on,
|
state = mesecon.state.on,
|
||||||
rules = trapped_chest_mesecons_rules,
|
rules = mesecon.rules.pplate,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
on_rightclick = nil,
|
on_rightclick = nil,
|
||||||
|
|
|
@ -6,7 +6,10 @@ local trapped_chest_mesecons_rules = mesecon.rules.pplate
|
||||||
|
|
||||||
mcl_chests.register_chest("stone_chest", {
|
mcl_chests.register_chest("stone_chest", {
|
||||||
desc = S("Stone Chest"),
|
desc = S("Stone Chest"),
|
||||||
large_desc = S("Large Stone Chest"),
|
title = {
|
||||||
|
small = S("Stone Chest"),
|
||||||
|
double = S("Large Stone Chest")
|
||||||
|
},
|
||||||
longdesc = S(
|
longdesc = S(
|
||||||
"Stone Chests are containers which provide 27 inventory slots. Stone Chests can be turned into" ..
|
"Stone Chests are containers which provide 27 inventory slots. Stone Chests can be turned into" ..
|
||||||
"large stone chests with double the capacity by placing two stone chests next to each other."
|
"large stone chests with double the capacity by placing two stone chests next to each other."
|
||||||
|
|
Loading…
Reference in New Issue