mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-25 12:01:06 +01:00
Refactor mcl_chests.register_chest and clean-up
This commit is contained in:
parent
d6d64d8837
commit
1d77017ca9
2 changed files with 170 additions and 156 deletions
|
@ -227,8 +227,6 @@ local function protection_check_put_take(pos, listname, index, stack, player)
|
||||||
end
|
end
|
||||||
mcl_chests.protection_check_put_take = protection_check_put_take
|
mcl_chests.protection_check_put_take = protection_check_put_take
|
||||||
|
|
||||||
local trapped_chest_mesecons_rules = mesecon.rules.pplate
|
|
||||||
|
|
||||||
-- To be called when a chest is closed (only relevant for trapped chest atm)
|
-- To be called when a chest is closed (only relevant for trapped chest atm)
|
||||||
local function chest_update_after_close(pos)
|
local function chest_update_after_close(pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
|
@ -237,25 +235,26 @@ local function chest_update_after_close(pos)
|
||||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_small", param2 = node.param2 })
|
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_small", param2 = node.param2 })
|
||||||
find_or_create_entity(pos, "mcl_chests:trapped_chest_small", { "mcl_chests_trapped.png" }, node.param2, false,
|
find_or_create_entity(pos, "mcl_chests:trapped_chest_small", { "mcl_chests_trapped.png" }, node.param2, false,
|
||||||
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small")
|
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small")
|
||||||
mesecon.receptor_off(pos, trapped_chest_mesecons_rules)
|
mesecon.receptor_off(pos, mesecon.rules.pplate)
|
||||||
elseif node.name == "mcl_chests:trapped_chest_on_left" then
|
elseif node.name == "mcl_chests:trapped_chest_on_left" then
|
||||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_left", param2 = node.param2 })
|
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_left", param2 = node.param2 })
|
||||||
find_or_create_entity(pos, "mcl_chests:trapped_chest_left", mcl_chests.tiles.chest_trapped_double, node.param2, true,
|
find_or_create_entity(pos, "mcl_chests:trapped_chest_left", mcl_chests.tiles.chest_trapped_double, node.param2, true,
|
||||||
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left")
|
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left")
|
||||||
mesecon.receptor_off(pos, trapped_chest_mesecons_rules)
|
mesecon.receptor_off(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_right", param2 = node.param2 })
|
minetest.swap_node(pos_other, { name = "mcl_chests:trapped_chest_right", param2 = node.param2 })
|
||||||
mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules)
|
mesecon.receptor_off(pos_other, mesecon.rules.pplate)
|
||||||
elseif node.name == "mcl_chests:trapped_chest_on_right" then
|
elseif node.name == "mcl_chests:trapped_chest_on_right" then
|
||||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_right", param2 = node.param2 })
|
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_right", param2 = node.param2 })
|
||||||
mesecon.receptor_off(pos, trapped_chest_mesecons_rules)
|
mesecon.receptor_off(pos, mesecon.rules.pplate)
|
||||||
|
|
||||||
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_other, { name = "mcl_chests:trapped_chest_left", param2 = node.param2 })
|
minetest.swap_node(pos_other, { name = "mcl_chests:trapped_chest_left", param2 = node.param2 })
|
||||||
find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", mcl_chests.tiles.chest_trapped_double, node.param2, true,
|
find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", mcl_chests.tiles.chest_trapped_double,
|
||||||
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left")
|
node.param2, true, "default_chest", "mcl_chests_chest", "chest")
|
||||||
mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules)
|
:reinitialize("mcl_chests:trapped_chest_left")
|
||||||
|
mesecon.receptor_off(pos_other, mesecon.rules.pplate)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
mcl_chests.chest_update_after_close = chest_update_after_close
|
mcl_chests.chest_update_after_close = chest_update_after_close
|
||||||
|
@ -269,8 +268,8 @@ local function player_chest_close(player)
|
||||||
end
|
end
|
||||||
if animated_chests then
|
if animated_chests then
|
||||||
find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2,
|
find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2,
|
||||||
open_chest.double,
|
open_chest.double, open_chest.sound, open_chest.mesh, open_chest.shulker and "shulker" or "chest")
|
||||||
open_chest.sound, open_chest.mesh, open_chest.shulker and "shulker" or "chest"):close(name)
|
:close(name)
|
||||||
end
|
end
|
||||||
chest_update_after_close(open_chest.pos)
|
chest_update_after_close(open_chest.pos)
|
||||||
|
|
||||||
|
@ -278,96 +277,108 @@ local function player_chest_close(player)
|
||||||
end
|
end
|
||||||
mcl_chests.player_chest_close = player_chest_close
|
mcl_chests.player_chest_close = player_chest_close
|
||||||
|
|
||||||
-- This is a helper function to register both chests and trapped chests. Trapped chests will make use of the additional parameters
|
local function double_chest_add_item(top_inv, bottom_inv, listname, stack)
|
||||||
function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help, tiles_table, hidden, mesecons,
|
if not stack or stack:is_empty() then return end
|
||||||
on_rightclick_addendum, on_rightclick_addendum_left,
|
|
||||||
on_rightclick_addendum_right, drop, canonical_basename)
|
local name = stack:get_name()
|
||||||
if not drop then
|
|
||||||
drop = "mcl_chests:" .. basename
|
local function top_off(inv, stack)
|
||||||
|
for c, chest_stack in ipairs(inv:get_list(listname)) do
|
||||||
|
if stack:is_empty() then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
if chest_stack:get_name() == name and chest_stack:get_free_space() > 0 then
|
||||||
|
stack = chest_stack:add_item(stack)
|
||||||
|
inv:set_stack(listname, c, chest_stack)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return stack
|
||||||
|
end
|
||||||
|
|
||||||
|
stack = top_off(top_inv, stack)
|
||||||
|
stack = top_off(bottom_inv, stack)
|
||||||
|
|
||||||
|
if not stack:is_empty() then
|
||||||
|
stack = top_inv:add_item(listname, stack)
|
||||||
|
if not stack:is_empty() then
|
||||||
|
bottom_inv:add_item(listname, stack)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_chest_blast(pos)
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
drop_items_chest(pos, node)
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function limit_put_list(stack, list)
|
||||||
|
for _, other in ipairs(list) do
|
||||||
|
stack = other:add_item(stack)
|
||||||
|
if stack:is_empty() then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return stack
|
||||||
|
end
|
||||||
|
|
||||||
|
local function limit_put(stack, inv1, inv2)
|
||||||
|
local leftover = ItemStack(stack)
|
||||||
|
leftover = limit_put_list(leftover, inv1:get_list("main"))
|
||||||
|
leftover = limit_put_list(leftover, inv2:get_list("main"))
|
||||||
|
return stack:get_count() - leftover:get_count()
|
||||||
|
end
|
||||||
|
|
||||||
|
local function close_forms(canonical_basename, pos)
|
||||||
|
local players = minetest.get_connected_players()
|
||||||
|
for p = 1, #players do
|
||||||
|
if vector.distance(players[p]:get_pos(), pos) <= 30 then
|
||||||
|
minetest.close_formspec(players[p]:get_player_name(),
|
||||||
|
"mcl_chests:" .. canonical_basename .. "_" .. pos.x .. "_" .. pos.y .. "_" .. pos.z)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- This is a helper function to register regular chests (both small and double variants).
|
||||||
|
-- Some parameters here are only utilized by trapped chests.
|
||||||
|
function mcl_chests.register_chest(basename, d)
|
||||||
|
-- If this passes without crash, we know for a fact that d = {...}
|
||||||
|
assert((d and type(d) == "table"), "Second argument to mcl_chests.register_chest must be a table")
|
||||||
|
|
||||||
|
if not d.drop then
|
||||||
|
d.drop = "mcl_chests:" .. basename
|
||||||
else
|
else
|
||||||
drop = "mcl_chests:" .. drop
|
d.drop = "mcl_chests:" .. d.drop
|
||||||
end
|
end
|
||||||
-- The basename of the "canonical" version of the node, if set (e.g.: trapped_chest_on → trapped_chest).
|
-- The basename of the "canonical" version of the node, if set (e.g.: trapped_chest_on → trapped_chest).
|
||||||
-- Used to get a shared formspec ID and to swap the node back to the canonical version in on_construct.
|
-- Used to get a shared formspec ID and to swap the node back to the canonical version in on_construct.
|
||||||
if not canonical_basename then
|
if not d.canonical_basename then
|
||||||
canonical_basename = basename
|
d.canonical_basename = basename
|
||||||
end
|
|
||||||
|
|
||||||
local function double_chest_add_item(top_inv, bottom_inv, listname, stack)
|
|
||||||
if not stack or stack:is_empty() then return end
|
|
||||||
|
|
||||||
local name = stack:get_name()
|
|
||||||
|
|
||||||
local function top_off(inv, stack)
|
|
||||||
for c, chest_stack in ipairs(inv:get_list(listname)) do
|
|
||||||
if stack:is_empty() then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
|
|
||||||
if chest_stack:get_name() == name and chest_stack:get_free_space() > 0 then
|
|
||||||
stack = chest_stack:add_item(stack)
|
|
||||||
inv:set_stack(listname, c, chest_stack)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return stack
|
|
||||||
end
|
|
||||||
|
|
||||||
stack = top_off(top_inv, stack)
|
|
||||||
stack = top_off(bottom_inv, stack)
|
|
||||||
|
|
||||||
if not stack:is_empty() then
|
|
||||||
stack = top_inv:add_item(listname, stack)
|
|
||||||
if not stack:is_empty() then
|
|
||||||
bottom_inv:add_item(listname, stack)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local drop_items_chest = mcl_util.drop_items_from_meta_container("main")
|
local drop_items_chest = mcl_util.drop_items_from_meta_container("main")
|
||||||
|
|
||||||
local function on_chest_blast(pos)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
drop_items_chest(pos, node)
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function limit_put_list(stack, list)
|
|
||||||
for _, other in ipairs(list) do
|
|
||||||
stack = other:add_item(stack)
|
|
||||||
if stack:is_empty() then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return stack
|
|
||||||
end
|
|
||||||
|
|
||||||
local function limit_put(stack, inv1, inv2)
|
|
||||||
local leftover = ItemStack(stack)
|
|
||||||
leftover = limit_put_list(leftover, inv1:get_list("main"))
|
|
||||||
leftover = limit_put_list(leftover, inv2:get_list("main"))
|
|
||||||
return stack:get_count() - leftover:get_count()
|
|
||||||
end
|
|
||||||
|
|
||||||
local small_name = "mcl_chests:" .. basename .. "_small"
|
local small_name = "mcl_chests:" .. basename .. "_small"
|
||||||
local small_textures = tiles_table.small
|
local small_textures = d.tiles.small
|
||||||
local left_name = "mcl_chests:" .. basename .. "_left"
|
local left_name = "mcl_chests:" .. basename .. "_left"
|
||||||
local right_name = "mcl_chests:" .. basename .. "_right"
|
local right_name = "mcl_chests:" .. basename .. "_right"
|
||||||
local double_textures = tiles_table.double
|
local double_textures = d.tiles.double
|
||||||
|
|
||||||
minetest.register_node("mcl_chests:" .. basename, {
|
minetest.register_node("mcl_chests:" .. basename, {
|
||||||
description = desc,
|
description = d.desc,
|
||||||
_tt_help = tt_help,
|
_tt_help = d.tt_help,
|
||||||
_doc_items_longdesc = longdesc,
|
_doc_items_longdesc = d.longdesc,
|
||||||
_doc_items_usagehelp = usagehelp,
|
_doc_items_usagehelp = d.usagehelp,
|
||||||
_doc_items_hidden = hidden,
|
_doc_items_hidden = d.hidden,
|
||||||
drawtype = "mesh",
|
drawtype = "mesh",
|
||||||
mesh = "mcl_chests_chest.b3d",
|
mesh = "mcl_chests_chest.b3d",
|
||||||
tiles = small_textures,
|
tiles = small_textures,
|
||||||
use_texture_alpha = "opaque",
|
use_texture_alpha = "opaque",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
sounds = d.sounds,
|
||||||
groups = { deco_block = 1 },
|
groups = { deco_block = 1 },
|
||||||
on_construct = function(pos, node)
|
on_construct = function(pos, node)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
|
@ -379,22 +390,12 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local function close_forms(canonical_basename, pos)
|
|
||||||
local players = minetest.get_connected_players()
|
|
||||||
for p = 1, #players do
|
|
||||||
if vector.distance(players[p]:get_pos(), pos) <= 30 then
|
|
||||||
minetest.close_formspec(players[p]:get_player_name(),
|
|
||||||
"mcl_chests:" .. canonical_basename .. "_" .. pos.x .. "_" .. pos.y .. "_" .. pos.z)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node(small_name, {
|
minetest.register_node(small_name, {
|
||||||
description = desc,
|
description = d.desc,
|
||||||
_tt_help = tt_help,
|
_tt_help = d.tt_help,
|
||||||
_doc_items_longdesc = longdesc,
|
_doc_items_longdesc = d.longdesc,
|
||||||
_doc_items_usagehelp = usagehelp,
|
_doc_items_usagehelp = d.usagehelp,
|
||||||
_doc_items_hidden = hidden,
|
_doc_items_hidden = d.hidden,
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -408,7 +409,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
_chest_entity_animation_type = "chest",
|
_chest_entity_animation_type = "chest",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
drop = drop,
|
drop = d.drop,
|
||||||
groups = {
|
groups = {
|
||||||
handy = 1,
|
handy = 1,
|
||||||
axey = 1,
|
axey = 1,
|
||||||
|
@ -420,7 +421,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
not_in_creative_inventory = 1
|
not_in_creative_inventory = 1
|
||||||
},
|
},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
sounds = d.sounds,
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local param2 = minetest.get_node(pos).param2
|
local param2 = minetest.get_node(pos).param2
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
@ -497,8 +498,8 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
minetest.log("action", player:get_player_name() ..
|
minetest.log("action", player:get_player_name() ..
|
||||||
" takes stuff from chest at " .. minetest.pos_to_string(pos))
|
" takes stuff from chest at " .. minetest.pos_to_string(pos))
|
||||||
end,
|
end,
|
||||||
_mcl_blast_resistance = 2.5,
|
_mcl_blast_resistance = d.hardness,
|
||||||
_mcl_hardness = 2.5,
|
_mcl_hardness = d.hardness,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
local topnode = minetest.get_node({ x = pos.x, y = pos.y + 1, z = pos.z })
|
local topnode = minetest.get_node({ x = pos.x, y = pos.y + 1, z = pos.z })
|
||||||
|
@ -514,7 +515,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.show_formspec(clicker:get_player_name(),
|
minetest.show_formspec(clicker:get_player_name(),
|
||||||
sf("mcl_chests:%s_%s_%s_%s", canonical_basename, pos.x, pos.y, pos.z),
|
sf("mcl_chests:%s_%s_%s_%s", d.canonical_basename, pos.x, pos.y, pos.z),
|
||||||
table.concat({
|
table.concat({
|
||||||
"formspec_version[4]",
|
"formspec_version[4]",
|
||||||
"size[11.75,10.425]",
|
"size[11.75,10.425]",
|
||||||
|
@ -533,8 +534,8 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
if on_rightclick_addendum then
|
if d.on_rightclick then
|
||||||
on_rightclick_addendum(pos, node, clicker)
|
d.on_rightclick(pos, node, clicker)
|
||||||
end
|
end
|
||||||
|
|
||||||
player_chest_open(clicker, pos, small_name, small_textures, node.param2, false, "default_chest",
|
player_chest_open(clicker, pos, small_name, small_textures, node.param2, false, "default_chest",
|
||||||
|
@ -542,9 +543,9 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_destruct = function(pos)
|
on_destruct = function(pos)
|
||||||
close_forms(canonical_basename, pos)
|
close_forms(d.canonical_basename, pos)
|
||||||
end,
|
end,
|
||||||
mesecons = mesecons,
|
mesecons = d.mesecons,
|
||||||
on_rotate = simple_rotate,
|
on_rotate = simple_rotate,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -572,15 +573,15 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
chest_entity = 1,
|
chest_entity = 1,
|
||||||
double_chest = 1
|
double_chest = 1
|
||||||
},
|
},
|
||||||
drop = drop,
|
drop = d.drop,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
sounds = d.sounds,
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local n = minetest.get_node(pos)
|
local n = minetest.get_node(pos)
|
||||||
local param2 = n.param2
|
local param2 = n.param2
|
||||||
local p = get_double_container_neighbor_pos(pos, param2, "left")
|
local p = get_double_container_neighbor_pos(pos, param2, "left")
|
||||||
if not p or minetest.get_node(p).name ~= "mcl_chests:" .. canonical_basename .. "_right" then
|
if not p or minetest.get_node(p).name ~= "mcl_chests:" .. d.canonical_basename .. "_right" then
|
||||||
n.name = "mcl_chests:" .. canonical_basename .. "_small"
|
n.name = "mcl_chests:" .. d.canonical_basename .. "_small"
|
||||||
minetest.swap_node(pos, n)
|
minetest.swap_node(pos, n)
|
||||||
end
|
end
|
||||||
create_entity(pos, left_name, double_textures, param2, true, "default_chest", "mcl_chests_chest", "chest")
|
create_entity(pos, left_name, double_textures, param2, true, "default_chest", "mcl_chests_chest", "chest")
|
||||||
|
@ -594,14 +595,14 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
close_forms(canonical_basename, pos)
|
close_forms(d.canonical_basename, pos)
|
||||||
|
|
||||||
local param2 = n.param2
|
local param2 = n.param2
|
||||||
local p = get_double_container_neighbor_pos(pos, param2, "left")
|
local p = get_double_container_neighbor_pos(pos, param2, "left")
|
||||||
if not p or minetest.get_node(p).name ~= "mcl_chests:" .. basename .. "_right" then
|
if not p or minetest.get_node(p).name ~= "mcl_chests:" .. basename .. "_right" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
close_forms(canonical_basename, p)
|
close_forms(d.canonical_basename, p)
|
||||||
|
|
||||||
minetest.swap_node(p, { name = small_name, param2 = param2 })
|
minetest.swap_node(p, { name = small_name, param2 = param2 })
|
||||||
create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest")
|
create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest")
|
||||||
|
@ -649,8 +650,8 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
minetest.log("action", player:get_player_name() ..
|
minetest.log("action", player:get_player_name() ..
|
||||||
" takes stuff from chest at " .. minetest.pos_to_string(pos))
|
" takes stuff from chest at " .. minetest.pos_to_string(pos))
|
||||||
end,
|
end,
|
||||||
_mcl_blast_resistance = 2.5,
|
_mcl_blast_resistance = d.hardness,
|
||||||
_mcl_hardness = 2.5,
|
_mcl_hardness = d.hardness,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "left")
|
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||||
|
@ -675,7 +676,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.show_formspec(clicker:get_player_name(),
|
minetest.show_formspec(clicker:get_player_name(),
|
||||||
sf("mcl_chests:%s_%s_%s_%s", canonical_basename, pos.x, pos.y, pos.z),
|
sf("mcl_chests:%s_%s_%s_%s", d.canonical_basename, pos.x, pos.y, pos.z),
|
||||||
table.concat({
|
table.concat({
|
||||||
"formspec_version[4]",
|
"formspec_version[4]",
|
||||||
"size[11.75,14.15]",
|
"size[11.75,14.15]",
|
||||||
|
@ -704,14 +705,14 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
if on_rightclick_addendum_left then
|
if d.on_rightclick_left then
|
||||||
on_rightclick_addendum_left(pos, node, clicker)
|
d.on_rightclick_left(pos, node, clicker)
|
||||||
end
|
end
|
||||||
|
|
||||||
player_chest_open(clicker, pos, left_name, double_textures, node.param2, true, "default_chest",
|
player_chest_open(clicker, pos, left_name, double_textures, node.param2, true, "default_chest",
|
||||||
"mcl_chests_chest")
|
"mcl_chests_chest")
|
||||||
end,
|
end,
|
||||||
mesecons = mesecons,
|
mesecons = d.mesecons,
|
||||||
on_rotate = no_rotate,
|
on_rotate = no_rotate,
|
||||||
_mcl_hoppers_on_try_pull = function(pos, hop_pos, hop_inv, hop_list)
|
_mcl_hoppers_on_try_pull = function(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
@ -766,9 +767,9 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
flammable = -1,
|
flammable = -1,
|
||||||
double_chest = 2
|
double_chest = 2
|
||||||
},
|
},
|
||||||
drop = drop,
|
drop = d.drop,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
sounds = d.sounds,
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local n = minetest.get_node(pos)
|
local n = minetest.get_node(pos)
|
||||||
local param2 = n.param2
|
local param2 = n.param2
|
||||||
|
@ -787,14 +788,14 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
close_forms(canonical_basename, pos)
|
close_forms(d.canonical_basename, pos)
|
||||||
|
|
||||||
local param2 = n.param2
|
local param2 = n.param2
|
||||||
local p = get_double_container_neighbor_pos(pos, param2, "right")
|
local p = get_double_container_neighbor_pos(pos, param2, "right")
|
||||||
if not p or minetest.get_node(p).name ~= left_name then
|
if not p or minetest.get_node(p).name ~= left_name then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
close_forms(canonical_basename, p)
|
close_forms(d.canonical_basename, p)
|
||||||
|
|
||||||
minetest.swap_node(p, { name = small_name, param2 = param2 })
|
minetest.swap_node(p, { name = small_name, param2 = param2 })
|
||||||
create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest")
|
create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest")
|
||||||
|
@ -842,8 +843,8 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
minetest.log("action", player:get_player_name() ..
|
minetest.log("action", player:get_player_name() ..
|
||||||
" takes stuff from chest at " .. minetest.pos_to_string(pos))
|
" takes stuff from chest at " .. minetest.pos_to_string(pos))
|
||||||
end,
|
end,
|
||||||
_mcl_blast_resistance = 2.5,
|
_mcl_blast_resistance = d.hardness,
|
||||||
_mcl_hardness = 2.5,
|
_mcl_hardness = d.hardness,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = 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")
|
||||||
|
@ -868,7 +869,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.show_formspec(clicker:get_player_name(),
|
minetest.show_formspec(clicker:get_player_name(),
|
||||||
sf("mcl_chests:%s_%s_%s_%s", canonical_basename, pos.x, pos.y, pos.z),
|
sf("mcl_chests:%s_%s_%s_%s", d.canonical_basename, pos.x, pos.y, pos.z),
|
||||||
table.concat({
|
table.concat({
|
||||||
"formspec_version[4]",
|
"formspec_version[4]",
|
||||||
"size[11.75,14.15]",
|
"size[11.75,14.15]",
|
||||||
|
@ -897,14 +898,14 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
if on_rightclick_addendum_right then
|
if d.on_rightclick_right then
|
||||||
on_rightclick_addendum_right(pos, node, clicker)
|
d.on_rightclick_right(pos, node, clicker)
|
||||||
end
|
end
|
||||||
|
|
||||||
player_chest_open(clicker, pos_other, left_name, double_textures, node.param2, true, "default_chest",
|
player_chest_open(clicker, pos_other, left_name, double_textures, node.param2, true, "default_chest",
|
||||||
"mcl_chests_chest")
|
"mcl_chests_chest")
|
||||||
end,
|
end,
|
||||||
mesecons = mesecons,
|
mesecons = d.mesecons,
|
||||||
on_rotate = no_rotate,
|
on_rotate = no_rotate,
|
||||||
_mcl_hoppers_on_try_pull = function(pos, hop_pos, hop_inv, hop_list)
|
_mcl_hoppers_on_try_pull = function(pos, hop_pos, hop_inv, hop_list)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
|
|
|
@ -6,55 +6,59 @@ 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.")
|
||||||
|
|
||||||
mcl_chests.register_chest("chest",
|
mcl_chests.register_chest("chest", {
|
||||||
S("Chest"),
|
desc = S("Chest"),
|
||||||
S(
|
longdesc = S(
|
||||||
"Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with " ..
|
"Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with " ..
|
||||||
"double the capacity by placing two chests next to each other."
|
"double the capacity by placing two chests next to each other."
|
||||||
),
|
),
|
||||||
chestusage,
|
usagehelp = chestusage,
|
||||||
S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest"),
|
tt_help = S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest"),
|
||||||
{
|
tiles = {
|
||||||
small = mcl_chests.tiles.chest_normal_small,
|
small = mcl_chests.tiles.chest_normal_small,
|
||||||
double = mcl_chests.tiles.chest_normal_double,
|
double = mcl_chests.tiles.chest_normal_double,
|
||||||
inv = { "default_chest_top.png", "mcl_chests_chest_bottom.png",
|
inv = { "default_chest_top.png", "mcl_chests_chest_bottom.png",
|
||||||
"mcl_chests_chest_right.png", "mcl_chests_chest_left.png",
|
"mcl_chests_chest_right.png", "mcl_chests_chest_left.png",
|
||||||
"mcl_chests_chest_back.png", "default_chest_front.png" },
|
"mcl_chests_chest_back.png", "default_chest_front.png" },
|
||||||
},
|
},
|
||||||
false
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||||
)
|
hardness = 2.5,
|
||||||
|
hidden = false,
|
||||||
|
})
|
||||||
|
|
||||||
local traptiles = {
|
local traptiles = {
|
||||||
small = mcl_chests.tiles.chest_trapped_small,
|
small = mcl_chests.tiles.chest_trapped_small,
|
||||||
double = mcl_chests.tiles.chest_trapped_double,
|
double = mcl_chests.tiles.chest_trapped_double,
|
||||||
}
|
}
|
||||||
|
|
||||||
mcl_chests.register_chest("trapped_chest",
|
mcl_chests.register_chest("trapped_chest", {
|
||||||
S("Trapped Chest"),
|
desc = S("Trapped Chest"),
|
||||||
S(
|
longdesc = S(
|
||||||
"A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone " ..
|
"A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone " ..
|
||||||
"signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped " ..
|
"signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped " ..
|
||||||
"chests with double the capacity by placing two trapped chests next to each other."
|
"chests with double the capacity by placing two trapped chests next to each other."
|
||||||
),
|
),
|
||||||
chestusage,
|
usagehelp = chestusage,
|
||||||
S("27 inventory slots") ..
|
tt_help = S("27 inventory slots") ..
|
||||||
"\n" .. S("Can be combined to a large chest") .. "\n" .. S("Emits a redstone signal when opened"),
|
"\n" .. S("Can be combined to a large chest") .. "\n" .. S("Emits a redstone signal when opened"),
|
||||||
traptiles,
|
tiles = traptiles,
|
||||||
nil,
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||||
{
|
hardness = 2.5,
|
||||||
|
hidden = false,
|
||||||
|
mesecons = {
|
||||||
receptor = {
|
receptor = {
|
||||||
state = mesecon.state.off,
|
state = mesecon.state.off,
|
||||||
rules = trapped_chest_mesecons_rules,
|
rules = trapped_chest_mesecons_rules,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_on_small", param2 = node.param2 })
|
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_on_small", param2 = node.param2 })
|
||||||
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, trapped_chest_mesecons_rules)
|
||||||
end,
|
end,
|
||||||
function(pos, node, clicker)
|
on_rightclick_left = function(pos, node, clicker)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_int("players", 1)
|
meta:set_int("players", 1)
|
||||||
|
|
||||||
|
@ -68,7 +72,7 @@ mcl_chests.register_chest("trapped_chest",
|
||||||
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, trapped_chest_mesecons_rules)
|
||||||
end,
|
end,
|
||||||
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 })
|
||||||
|
@ -80,20 +84,29 @@ mcl_chests.register_chest("trapped_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, trapped_chest_mesecons_rules)
|
||||||
end
|
end
|
||||||
)
|
})
|
||||||
|
|
||||||
mcl_chests.register_chest("trapped_chest_on",
|
mcl_chests.register_chest("trapped_chest_on", {
|
||||||
nil, nil, nil, nil, traptiles, true,
|
desc = nil,
|
||||||
{
|
longdesc = nil,
|
||||||
|
usagehelp = nil,
|
||||||
|
tt_help = nil,
|
||||||
|
tiles = traptiles,
|
||||||
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||||
|
hardness = 2.5,
|
||||||
|
hidden = true,
|
||||||
|
mesecons = {
|
||||||
receptor = {
|
receptor = {
|
||||||
state = mesecon.state.on,
|
state = mesecon.state.on,
|
||||||
rules = trapped_chest_mesecons_rules,
|
rules = trapped_chest_mesecons_rules,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil, nil, nil,
|
on_rightclick = nil,
|
||||||
"trapped_chest",
|
on_rightclick_left = nil,
|
||||||
"trapped_chest"
|
on_rightclick_right = nil,
|
||||||
)
|
drop = "trapped_chest",
|
||||||
|
canonical_basename = "trapped_chest"
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mcl_chests:chest",
|
output = "mcl_chests:chest",
|
||||||
|
|
Loading…
Reference in a new issue