mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-22 02:21:06 +01:00
Clean-up ITEMS/mcl_chests code, part 2
Chest tile management has been reorganized to use postfixes, some slight formatting fixes applied here and there, and roughly marked down where the new files should (ideally) begin and end.
This commit is contained in:
parent
d5b3a6f658
commit
b10bfe27ce
1 changed files with 168 additions and 72 deletions
|
@ -1,6 +1,6 @@
|
|||
-- TODO
|
||||
-- ====
|
||||
-- [ ] Take another full look at this code and clean-up even more.
|
||||
-- [x] Take another full look at this code and clean-up even more.
|
||||
-- [ ] Expose more functions that are currently local.
|
||||
-- [ ] Split this giant 1.6k-line file into:
|
||||
-- - init.lua (dofiles and LBMs)
|
||||
|
@ -21,35 +21,47 @@ local table = table
|
|||
local math = math
|
||||
|
||||
local sf = string.format
|
||||
local sm = string.match
|
||||
|
||||
mcl_chests = {}
|
||||
|
||||
local get_double_container_neighbor_pos = mcl_util.get_double_container_neighbor_pos
|
||||
|
||||
-- Christmas chest setup
|
||||
local it_is_christmas = mcl_util.is_it_christmas()
|
||||
|
||||
local tiles_chest_normal_small = { "mcl_chests_normal.png" }
|
||||
local tiles_chest_normal_double = { "mcl_chests_normal_double.png" }
|
||||
local tiles = { -- extensions will be added later
|
||||
chest_normal_small = { "mcl_chests_normal" },
|
||||
chest_normal_double = { "mcl_chests_normal_double" },
|
||||
chest_trapped_small = { "mcl_chests_trapped" },
|
||||
chest_trapped_double = { "mcl_chests_trapped_double" },
|
||||
chest_ender_small = { "mcl_chests_ender" },
|
||||
ender_chest_texture = { "mcl_chests_ender" },
|
||||
}
|
||||
|
||||
local tiles_postfix = ".png"
|
||||
local tiles_postfix_double = ".png"
|
||||
if it_is_christmas then
|
||||
tiles_chest_normal_small = { "mcl_chests_normal_present.png^mcl_chests_noise.png" }
|
||||
tiles_chest_normal_double = { "mcl_chests_normal_double_present.png^mcl_chests_noise_double.png" }
|
||||
tiles_postfix = "_present.png^mcl_chests_noise.png"
|
||||
tiles_postfix_double = "_present.png^mcl_chests_noise_double.png"
|
||||
end
|
||||
|
||||
local tiles_chest_trapped_small = { "mcl_chests_trapped.png" }
|
||||
local tiles_chest_trapped_double = { "mcl_chests_trapped_double.png" }
|
||||
|
||||
if it_is_christmas then
|
||||
tiles_chest_trapped_small = { "mcl_chests_trapped_present.png^mcl_chests_noise.png" }
|
||||
tiles_chest_trapped_double = { "mcl_chests_trapped_double_present.png^mcl_chests_noise_double.png" }
|
||||
-- Append the postfixes for each entry
|
||||
for k,v in pairs(tiles) do
|
||||
if not sm(k, "double") then
|
||||
tiles[k] = {v[1] .. tiles_postfix}
|
||||
else
|
||||
tiles[k] = {v[1] .. tiles_postfix_double}
|
||||
end
|
||||
end
|
||||
|
||||
local tiles_chest_ender_small = { "mcl_chests_ender.png" }
|
||||
local ender_chest_texture = { "mcl_chests_ender.png" }
|
||||
|
||||
if it_is_christmas then
|
||||
tiles_chest_ender_small = { "mcl_chests_ender_present.png^mcl_chests_noise.png" }
|
||||
ender_chest_texture = { "mcl_chests_ender_present.png" }
|
||||
end
|
||||
|
||||
-- ======= --
|
||||
-- api.lua --
|
||||
-- ======= --
|
||||
|
||||
|
||||
|
||||
-- Chest Entity
|
||||
-- ============
|
||||
|
@ -179,7 +191,7 @@ local function get_entity_info(pos, param2, double, dir, entity_pos)
|
|||
end
|
||||
|
||||
local function create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir,
|
||||
entity_pos)
|
||||
entity_pos)
|
||||
dir, entity_pos = get_entity_info(pos, param2, double, dir, entity_pos)
|
||||
local obj = minetest.add_entity(entity_pos, "mcl_chests:chest")
|
||||
local luaentity = obj:get_luaentity()
|
||||
|
@ -196,7 +208,7 @@ local function find_or_create_entity(pos, node_name, textures, param2, double, s
|
|||
end
|
||||
|
||||
local no_rotate, simple_rotate
|
||||
if minetest.get_modpath("screwdriver") then
|
||||
if screwdriver then
|
||||
no_rotate = screwdriver.disallow
|
||||
simple_rotate = function(pos, node, user, mode, new_param2)
|
||||
if screwdriver.rotate_simple(pos, node, user, mode, new_param2) ~= false then
|
||||
|
@ -274,20 +286,20 @@ local function chest_update_after_close(pos)
|
|||
mesecon.receptor_off(pos, trapped_chest_mesecons_rules)
|
||||
elseif node.name == "mcl_chests:trapped_chest_on_left" then
|
||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_left", param2 = node.param2 })
|
||||
find_or_create_entity(pos, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true,
|
||||
find_or_create_entity(pos, "mcl_chests:trapped_chest_left", tiles.chest_trapped_double, node.param2, true,
|
||||
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left")
|
||||
mesecon.receptor_off(pos, trapped_chest_mesecons_rules)
|
||||
|
||||
local pos_other = mcl_util.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 })
|
||||
mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules)
|
||||
elseif node.name == "mcl_chests:trapped_chest_on_right" then
|
||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_right", param2 = node.param2 })
|
||||
mesecon.receptor_off(pos, trapped_chest_mesecons_rules)
|
||||
|
||||
local pos_other = mcl_util.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 })
|
||||
find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true,
|
||||
find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", tiles.chest_trapped_double, node.param2, true,
|
||||
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left")
|
||||
mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules)
|
||||
end
|
||||
|
@ -456,6 +468,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
on_construct = function(pos)
|
||||
local param2 = minetest.get_node(pos).param2
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
--[[ This is a workaround for Minetest issue 5894
|
||||
<https://github.com/minetest/minetest/issues/5894>.
|
||||
Apparently if we don't do this, large chests initially don't work when
|
||||
|
@ -466,8 +479,10 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
meta:set_string("workaround", "ignore_me")
|
||||
meta:set_string("workaround", nil) -- Done to keep metadata clean
|
||||
-- END OF WORKAROUND --
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 9 * 3)
|
||||
|
||||
--[[ The "input" list is *another* workaround (hahahaha!) around the fact that Minetest
|
||||
does not support listrings to put items into an alternative list if the first one
|
||||
happens to be full. See <https://github.com/minetest/minetest/issues/5343>.
|
||||
|
@ -480,19 +495,19 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
-- END OF LISTRING WORKAROUND
|
||||
|
||||
-- Combine into a double chest if neighbouring another small chest
|
||||
if minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "right")).name ==
|
||||
if minetest.get_node(get_double_container_neighbor_pos(pos, param2, "right")).name ==
|
||||
small_name then
|
||||
minetest.swap_node(pos, { name = right_name, param2 = param2 })
|
||||
local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right")
|
||||
local p = get_double_container_neighbor_pos(pos, param2, "right")
|
||||
minetest.swap_node(p, { name = left_name, param2 = param2 })
|
||||
create_entity(p, left_name, double_textures, param2, true, "default_chest",
|
||||
"mcl_chests_chest", "chest")
|
||||
elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name ==
|
||||
elseif minetest.get_node(get_double_container_neighbor_pos(pos, param2, "left")).name ==
|
||||
small_name then
|
||||
minetest.swap_node(pos, { name = left_name, param2 = param2 })
|
||||
create_entity(pos, left_name, double_textures, param2, true, "default_chest",
|
||||
"mcl_chests_chest", "chest")
|
||||
local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left")
|
||||
local p = get_double_container_neighbor_pos(pos, param2, "left")
|
||||
minetest.swap_node(p, { name = right_name, param2 = param2 })
|
||||
else
|
||||
minetest.swap_node(pos, { name = small_name, param2 = param2 })
|
||||
|
@ -607,7 +622,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
on_construct = function(pos)
|
||||
local n = minetest.get_node(pos)
|
||||
local param2 = n.param2
|
||||
local p = mcl_util.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
|
||||
n.name = "mcl_chests:" .. canonical_basename .. "_small"
|
||||
minetest.swap_node(pos, n)
|
||||
|
@ -626,7 +641,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
close_forms(canonical_basename, pos)
|
||||
|
||||
local param2 = n.param2
|
||||
local p = mcl_util.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
|
||||
return
|
||||
end
|
||||
|
@ -644,13 +659,13 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return 0
|
||||
-- BEGIN OF LISTRING WORKAROUND
|
||||
-- BEGIN OF LISTRING WORKAROUND
|
||||
elseif listname == "input" then
|
||||
local inv = minetest.get_inventory({ type = "node", pos = pos })
|
||||
local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left")
|
||||
local other_pos = get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left")
|
||||
local other_inv = minetest.get_inventory({ type = "node", pos = other_pos })
|
||||
return limit_put(stack, inv, other_inv)
|
||||
-- END OF LISTRING WORKAROUND
|
||||
-- END OF LISTRING WORKAROUND
|
||||
else
|
||||
return stack:get_count()
|
||||
end
|
||||
|
@ -665,7 +680,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
-- BEGIN OF LISTRING WORKAROUND
|
||||
if listname == "input" then
|
||||
local inv = minetest.get_inventory({ type = "node", pos = pos })
|
||||
local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left")
|
||||
local other_pos = get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left")
|
||||
local other_inv = minetest.get_inventory({ type = "node", pos = other_pos })
|
||||
|
||||
inv:set_stack("input", 1, nil)
|
||||
|
@ -682,21 +697,24 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
_mcl_hardness = 2.5,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||
local above_def = minetest.registered_nodes[minetest.get_node({ x = pos.x, y = pos.y + 1, z = pos.z }).name]
|
||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||
local above_def = minetest.registered_nodes[
|
||||
minetest.get_node({ x = pos.x, y = pos.y + 1, z = pos.z }).name
|
||||
]
|
||||
local above_def_other = minetest.registered_nodes[
|
||||
minetest.get_node({ x = pos_other.x, y = pos_other.y + 1, z = pos_other.z }).name]
|
||||
minetest.get_node({ x = pos_other.x, y = pos_other.y + 1, z = pos_other.z }).name
|
||||
]
|
||||
|
||||
if not above_def or above_def.groups.opaque == 1 or not above_def_other or above_def_other.groups.opaque == 1 then
|
||||
if (not above_def or above_def.groups.opaque == 1 or not above_def_other
|
||||
or above_def_other.groups.opaque == 1) then
|
||||
-- won't open if there is no space from the top
|
||||
return false
|
||||
end
|
||||
|
||||
local name = minetest.get_meta(pos):get_string("name")
|
||||
if name == "" then
|
||||
if name == "" then -- if empty after that ^
|
||||
name = minetest.get_meta(pos_other):get_string("name")
|
||||
end
|
||||
if name == "" then
|
||||
end if name == "" then -- if STILL empty after that ^
|
||||
name = S("Large Chest")
|
||||
end
|
||||
|
||||
|
@ -722,6 +740,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
"listring[current_player;main]",
|
||||
sf("listring[nodemeta:%s,%s,%s;input]", pos.x, pos.y, pos.z),
|
||||
--END OF LISTRING WORKAROUND
|
||||
|
||||
"listring[current_player;main]" ..
|
||||
sf("listring[nodemeta:%s,%s,%s;main]", pos.x, pos.y, pos.z),
|
||||
"listring[current_player;main]",
|
||||
|
@ -741,12 +760,14 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
_mcl_hoppers_on_try_pull = function(pos, hop_pos, hop_inv, hop_list)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
local stack_id = mcl_util.select_stack(inv, "main", hop_inv, hop_list)
|
||||
if stack_id ~= nil then
|
||||
return inv, "main", stack_id
|
||||
end
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||
local meta_other = minetest.get_meta(pos_other)
|
||||
local inv_other = meta_other:get_inventory()
|
||||
stack_id = mcl_util.select_stack(inv_other, "main", hop_inv, hop_list)
|
||||
|
@ -755,12 +776,14 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
local stack_id = mcl_util.select_stack(hop_inv, hop_list, inv, "main", nil, 1)
|
||||
if stack_id ~= nil then
|
||||
return inv, "main", stack_id
|
||||
end
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||
local meta_other = minetest.get_meta(pos_other)
|
||||
local inv_other = meta_other:get_inventory()
|
||||
stack_id = mcl_util.select_stack(hop_inv, hop_list, inv_other, "main", nil, 1)
|
||||
|
@ -793,7 +816,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
on_construct = function(pos)
|
||||
local n = minetest.get_node(pos)
|
||||
local param2 = n.param2
|
||||
local p = mcl_util.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
|
||||
n.name = small_name
|
||||
minetest.swap_node(pos, n)
|
||||
|
@ -811,7 +834,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
close_forms(canonical_basename, pos)
|
||||
|
||||
local param2 = n.param2
|
||||
local p = mcl_util.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
|
||||
return
|
||||
end
|
||||
|
@ -829,13 +852,13 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return 0
|
||||
-- BEGIN OF LISTRING WORKAROUND
|
||||
-- BEGIN OF LISTRING WORKAROUND
|
||||
elseif listname == "input" then
|
||||
local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right")
|
||||
local other_pos = get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right")
|
||||
local other_inv = minetest.get_inventory({ type = "node", pos = other_pos })
|
||||
local inv = minetest.get_inventory({ type = "node", pos = pos })
|
||||
return limit_put(stack, other_inv, inv)
|
||||
-- END OF LISTRING WORKAROUND
|
||||
-- END OF LISTRING WORKAROUND
|
||||
else
|
||||
return stack:get_count()
|
||||
end
|
||||
|
@ -849,7 +872,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
" moves stuff to chest at " .. minetest.pos_to_string(pos))
|
||||
-- BEGIN OF LISTRING WORKAROUND
|
||||
if listname == "input" then
|
||||
local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right")
|
||||
local other_pos = get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right")
|
||||
local other_inv = minetest.get_inventory({ type = "node", pos = other_pos })
|
||||
local inv = minetest.get_inventory({ type = "node", pos = pos })
|
||||
|
||||
|
@ -867,20 +890,24 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
_mcl_hardness = 2.5,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||
if minetest.registered_nodes[minetest.get_node(vector.offset(pos, 0, 1, 0)).name].groups.opaque == 1
|
||||
or
|
||||
minetest.registered_nodes[minetest.get_node(vector.offset(pos_other, 0, 1, 0)).name].groups.opaque
|
||||
== 1 then
|
||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||
local above_def = minetest.registered_nodes[
|
||||
minetest.get_node({ x = pos.x, y = pos.y + 1, z = pos.z }).name
|
||||
]
|
||||
local above_def_other = minetest.registered_nodes[
|
||||
minetest.get_node({ x = pos_other.x, y = pos_other.y + 1, z = pos_other.z }).name
|
||||
]
|
||||
|
||||
if (not above_def or above_def.groups.opaque == 1 or not above_def_other
|
||||
or above_def_other.groups.opaque == 1) then
|
||||
-- won't open if there is no space from the top
|
||||
return false
|
||||
end
|
||||
|
||||
local name = minetest.get_meta(pos_other):get_string("name")
|
||||
if name == "" then
|
||||
name = minetest.get_meta(pos):get_string("name")
|
||||
end
|
||||
if name == "" then
|
||||
local name = minetest.get_meta(pos):get_string("name")
|
||||
if name == "" then -- if empty after that ^
|
||||
name = minetest.get_meta(pos_other):get_string("name")
|
||||
end if name == "" then -- if STILL empty after that ^
|
||||
name = S("Large Chest")
|
||||
end
|
||||
|
||||
|
@ -906,6 +933,7 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
"listring[current_player;main]",
|
||||
sf("listring[nodemeta:%s,%s,%s;input]", pos.x, pos.y, pos.z),
|
||||
--END OF LISTRING WORKAROUND
|
||||
|
||||
"listring[current_player;main]" ..
|
||||
sf("listring[nodemeta:%s,%s,%s;main]", pos_other.x, pos_other.y, pos_other.z),
|
||||
"listring[current_player;main]",
|
||||
|
@ -924,13 +952,15 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
on_rotate = no_rotate,
|
||||
_mcl_hoppers_on_try_pull = function(pos, hop_pos, hop_inv, hop_list)
|
||||
local node = minetest.get_node(pos)
|
||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||
local meta_other = minetest.get_meta(pos_other)
|
||||
local inv_other = meta_other:get_inventory()
|
||||
|
||||
local stack_id = mcl_util.select_stack(inv_other, "main", hop_inv, hop_list)
|
||||
if stack_id ~= nil then
|
||||
return inv_other, "main", stack_id
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
stack_id = mcl_util.select_stack(inv, "main", hop_inv, hop_list)
|
||||
|
@ -938,13 +968,15 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
end,
|
||||
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
||||
local node = minetest.get_node(pos)
|
||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||
local pos_other = get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||
local meta_other = minetest.get_meta(pos_other)
|
||||
local inv_other = meta_other:get_inventory()
|
||||
|
||||
local stack_id = mcl_util.select_stack(hop_inv, hop_list, inv_other, "main", nil, 1)
|
||||
if stack_id ~= nil then
|
||||
return inv_other, "main", stack_id
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
stack_id = mcl_util.select_stack(hop_inv, hop_list, inv, "main", nil, 1)
|
||||
|
@ -958,6 +990,14 @@ function mcl_chests.register_chest(basename, desc, longdesc, usagehelp, tt_help,
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ========== --
|
||||
-- chests.lua --
|
||||
-- ========== --
|
||||
|
||||
|
||||
|
||||
local chestusage = S("To access its inventory, rightclick it. When broken, the items will drop out.")
|
||||
|
||||
mcl_chests.register_chest("chest",
|
||||
|
@ -966,8 +1006,8 @@ mcl_chests.register_chest("chest",
|
|||
chestusage,
|
||||
S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest"),
|
||||
{
|
||||
small = tiles_chest_normal_small,
|
||||
double = tiles_chest_normal_double,
|
||||
small = tiles.chest_normal_small,
|
||||
double = tiles.chest_normal_double,
|
||||
inv = { "default_chest_top.png", "mcl_chests_chest_bottom.png",
|
||||
"mcl_chests_chest_right.png", "mcl_chests_chest_left.png",
|
||||
"mcl_chests_chest_back.png", "default_chest_front.png" },
|
||||
|
@ -976,8 +1016,8 @@ mcl_chests.register_chest("chest",
|
|||
)
|
||||
|
||||
local traptiles = {
|
||||
small = tiles_chest_trapped_small,
|
||||
double = tiles_chest_trapped_double,
|
||||
small = tiles.chest_trapped_small,
|
||||
double = tiles.chest_trapped_double,
|
||||
}
|
||||
|
||||
mcl_chests.register_chest("trapped_chest",
|
||||
|
@ -1005,22 +1045,22 @@ mcl_chests.register_chest("trapped_chest",
|
|||
meta:set_int("players", 1)
|
||||
|
||||
minetest.swap_node(pos, { name = "mcl_chests:trapped_chest_on_left", param2 = node.param2 })
|
||||
find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left", tiles_chest_trapped_double, node.param2, true,
|
||||
find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left", tiles.chest_trapped_double, node.param2, true,
|
||||
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left")
|
||||
mesecon.receptor_on(pos, trapped_chest_mesecons_rules)
|
||||
|
||||
local pos_other = mcl_util.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 })
|
||||
mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules)
|
||||
end,
|
||||
function(pos, node, clicker)
|
||||
local pos_other = mcl_util.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 })
|
||||
mesecon.receptor_on(pos, trapped_chest_mesecons_rules)
|
||||
|
||||
minetest.swap_node(pos_other, { name = "mcl_chests:trapped_chest_on_left", param2 = node.param2 })
|
||||
find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left", tiles_chest_trapped_double, node.param2,
|
||||
find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left", tiles.chest_trapped_double, node.param2,
|
||||
true,
|
||||
"default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left")
|
||||
mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules)
|
||||
|
@ -1040,6 +1080,14 @@ mcl_chests.register_chest("trapped_chest_on",
|
|||
"trapped_chest"
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- ================= --
|
||||
-- CONTINUE init.lua --
|
||||
-- ================= --
|
||||
|
||||
|
||||
|
||||
-- Disable chest when it has been closed
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname:find("mcl_chests:") == 1 then
|
||||
|
@ -1053,6 +1101,14 @@ minetest.register_on_leaveplayer(function(player)
|
|||
player_chest_close(player)
|
||||
end)
|
||||
|
||||
|
||||
|
||||
-- =================== --
|
||||
-- CONTINUE chests.lua --
|
||||
-- =================== --
|
||||
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_chests:chest",
|
||||
recipe = {
|
||||
|
@ -1074,6 +1130,14 @@ minetest.register_craft({
|
|||
burntime = 15,
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- ========= --
|
||||
-- ender.lua --
|
||||
-- ========= --
|
||||
|
||||
|
||||
|
||||
minetest.register_node("mcl_chests:ender_chest", {
|
||||
description = S("Ender Chest"),
|
||||
_tt_help = S("27 interdimensional inventory slots") ..
|
||||
|
@ -1083,7 +1147,7 @@ minetest.register_node("mcl_chests:ender_chest", {
|
|||
_doc_items_usagehelp = S("Rightclick the ender chest to access your personal interdimensional inventory."),
|
||||
drawtype = "mesh",
|
||||
mesh = "mcl_chests_chest.b3d",
|
||||
tiles = tiles_chest_ender_small,
|
||||
tiles = tiles.chest_ender_small,
|
||||
use_texture_alpha = "opaque",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
|
@ -1127,7 +1191,7 @@ minetest.register_node("mcl_chests:ender_chest_small", {
|
|||
type = "fixed",
|
||||
fixed = { -0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375 },
|
||||
},
|
||||
_chest_entity_textures = ender_chest_texture,
|
||||
_chest_entity_textures = tiles.ender_chest_texture,
|
||||
_chest_entity_sound = "mcl_chests_enderchest",
|
||||
_chest_entity_mesh = "mcl_chests_chest",
|
||||
_chest_entity_animation_type = "chest",
|
||||
|
@ -1143,7 +1207,7 @@ minetest.register_node("mcl_chests:ender_chest_small", {
|
|||
sounds = mcl_sounds.node_sound_stone_defaults(),
|
||||
drop = "mcl_core:obsidian 8",
|
||||
on_construct = function(pos)
|
||||
create_entity(pos, "mcl_chests:ender_chest_small", ender_chest_texture, minetest.get_node(pos).param2, false,
|
||||
create_entity(pos, "mcl_chests:ender_chest_small", tiles.ender_chest_texture, minetest.get_node(pos).param2, false,
|
||||
"mcl_chests_enderchest", "mcl_chests_chest", "chest")
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
|
@ -1153,7 +1217,7 @@ minetest.register_node("mcl_chests:ender_chest_small", {
|
|||
end
|
||||
minetest.show_formspec(clicker:get_player_name(), "mcl_chests:ender_chest_" .. clicker:get_player_name(),
|
||||
formspec_ender_chest)
|
||||
player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", ender_chest_texture, node.param2, false,
|
||||
player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", tiles.ender_chest_texture, node.param2, false,
|
||||
"mcl_chests_enderchest", "mcl_chests_chest")
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
|
@ -1195,6 +1259,14 @@ minetest.register_craft({
|
|||
},
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- ============ --
|
||||
-- shulkers.lua --
|
||||
-- ============ --
|
||||
|
||||
|
||||
|
||||
-- Shulker boxes
|
||||
local boxtypes = {
|
||||
white = S("White Shulker Box"),
|
||||
|
@ -1487,12 +1559,28 @@ for color, desc in pairs(boxtypes) do
|
|||
})
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ================ --
|
||||
-- CONTINUE api.lua --
|
||||
-- ================ --
|
||||
|
||||
|
||||
|
||||
-- Returns false if itemstack is a shulker box
|
||||
function mcl_chests.is_not_shulker_box(stack)
|
||||
local g = minetest.get_item_group(stack:get_name(), "shulker_box")
|
||||
return g == 0 or g == nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ===================== --
|
||||
-- CONTINUE shulkers.lua --
|
||||
-- ===================== --
|
||||
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_chests:violet_shulker_box",
|
||||
recipe = {
|
||||
|
@ -1523,6 +1611,14 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv
|
|||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
-- ================= --
|
||||
-- CONTINUE init.lua --
|
||||
-- ================= --
|
||||
|
||||
|
||||
|
||||
local function select_and_spawn_entity(pos, node)
|
||||
local node_name = node.name
|
||||
local node_def = minetest.registered_nodes[node_name]
|
||||
|
|
Loading…
Reference in a new issue