From b10bfe27cef25b75d291f93145dabdb1813832df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikita=20Wi=C5=9Bniewski?= Date: Fri, 21 Jun 2024 14:29:21 +0700 Subject: [PATCH] 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. --- mods/ITEMS/mcl_chests/init.lua | 240 +++++++++++++++++++++++---------- 1 file changed, 168 insertions(+), 72 deletions(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index 74a31639f..f7186eea4 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -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 . 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 . @@ -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]