From ea938237d58a31209935a13c4884f92d5a98e070 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 3 Jan 2021 14:21:35 +0100 Subject: [PATCH 01/11] Animated Chests --- mods/ITEMS/mcl_chests/init.lua | 265 +++++++++++++++--- .../mcl_chests/models/mcl_chests_chest.b3d | Bin 0 -> 6075 bytes .../mcl_chests/models/mcl_chests_chest.obj | 91 ++++++ .../models/mcl_chests_double_chest.b3d | Bin 0 -> 10342 bytes .../mcl_chests/sounds/default_chest_close.ogg | Bin 0 -> 10768 bytes .../mcl_chests/sounds/default_chest_open.ogg | Bin 0 -> 11092 bytes .../textures/mcl_chests_trapped.png | Bin 0 -> 1209 bytes .../textures/mcl_chests_trapped_double.png | Bin 0 -> 2011 bytes 8 files changed, 320 insertions(+), 36 deletions(-) create mode 100644 mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d create mode 100644 mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj create mode 100644 mods/ITEMS/mcl_chests/models/mcl_chests_double_chest.b3d create mode 100644 mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg create mode 100644 mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png create mode 100644 mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index 3d5fbbca3..fdfae533a 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -7,6 +7,148 @@ if minetest.get_modpath("screwdriver") then simple_rotate = screwdriver.rotate_simple end +-- Chest Entity +local entity_animations = {} +local entity_animation_speed = 25 + +do + local names = {"open", "opened", "close", "closed"} + local following = {["open"] = "opened", ["close"] = "closed"} + local durations = {10, 0, 10, 5} + local anim_start = 0 + for index, name in ipairs(names) do + local duration = durations[index] + local anim_end = anim_start + duration + entity_animations[name] = { + bounds = {x = anim_start, y = anim_end}, + sched_anim = following[name], + sched_time = duration / entity_animation_speed + } + anim_start = anim_end + end +end + +minetest.register_entity("mcl_chests:chest", { + initial_properties = { + visual = "mesh", + visual_size = {x = 3, y = 3}, + pointable = false, + physical = false, + }, + + set_animation = function(self, animname) + local anim = entity_animations[animname] + self.object:set_animation(anim.bounds, entity_animation_speed, 0, false) + if anim.sched_anim then + self.sched_anim = anim.sched_anim + self.sched_time = anim.sched_time + end + end, + + open = function(self, playername) + self.players[playername] = true + if not self.is_open then + self.is_open = true + self:set_animation("open") + minetest.sound_play("default_chest_open", { + pos = self.node_pos, + }) + end + end, + + close = function(self, playername) + local playerlist = self.players + playerlist[playername] = nil + if self.is_open then + for _ in pairs(playerlist) do + return + end + self.is_open = false + self:set_animation("close") + minetest.sound_play("default_chest_close", { + pos = self.node_pos, + }) + end + end, + + initialize = function(self, node_pos, node_name, textures, dir, double) + self.node_pos = node_pos + self.node_name = node_name + local obj = self.object + obj:set_properties({textures = textures}) + obj:set_yaw(minetest.dir_to_yaw(dir)) + obj:set_properties({mesh = double and "mcl_chests_double_chest.b3d" or "mcl_chests_chest.b3d"}) + end, + + check = function(self) + local node_pos, node_name = self.node_pos, self.node_name + if not node_pos or not node_name then + return false + end + local node = minetest.get_node(node_pos) + if node.name ~= node_name then + return false + end + return true + end, + + on_activate = function(self) + self.object:set_armor_groups({immortal = 1}) + self:set_animation("closed") + self.players = {} + end, + + on_step = function(self, dtime) + local sched_anim, sched_time = self.sched_anim, self.sched_time + if not self:check() then + self.object:remove() + elseif sched_anim and sched_time then + sched_time = sched_time - dtime + if sched_time < 0 then + self:set_animation(sched_anim) + self.sched_time = nil + self.sched_anim = nil + else + self.sched_time = sched_time + end + end + end +}) + +local function get_entity_pos(pos, dir, double) + pos = vector.new(pos) + pos.y = pos.y - 0.4375 + if double then + local add, mul, vec, cross = vector.add, vector.multiply, vector.new, vector.cross + pos = add(pos, mul(cross(dir, vec(0, 1, 0)), -0.5)) + end + return pos +end + +local function find_entity(pos) + for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 0)) do + local luaentity = obj:get_luaentity() + if luaentity and luaentity.name == "mcl_chests:chest" then + return luaentity + end + end +end + +local function create_entity(pos, node_name, textures, param2, double, dir, entity_pos) + dir = dir or minetest.facedir_to_dir(param2) + entity_pos = entity_pos or get_entity_pos(pos, dir, double) + local obj = minetest.add_entity(entity_pos, "mcl_chests:chest") + local luaentity = obj:get_luaentity() + luaentity:initialize(pos, node_name, textures, dir, double) + return luaentity +end + +local function find_or_create_entity(pos, node_name, textures, param2, double) + local dir = minetest.facedir_to_dir(param2) + local entity_pos = get_entity_pos(pos, dir, double) + return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, dir, entity_pos) +end + --[[ List of open chests. Key: Player name Value: @@ -14,8 +156,10 @@ Value: Otherwise: nil ]] local open_chests = {} -- To be called if a player opened a chest -local player_chest_open = function(player, pos) - open_chests[player:get_player_name()] = { pos = pos } +local player_chest_open = function(player, pos, node_name, textures, param2, double) + local name = player:get_player_name() + open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double} + find_or_create_entity(pos, node_name, textures, param2, double):open(name) end -- Simple protection checking functions @@ -67,11 +211,12 @@ end -- To be called if a player closed a chest local player_chest_close = function(player) local name = player:get_player_name() - if open_chests[name] == nil then + local open_chest = open_chests[name] + if open_chest == nil then return end - local pos = open_chests[name].pos - chest_update_after_close(pos) + find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2, open_chest.double):close(name) + chest_update_after_close(open_chest.pos) open_chests[name] = nil end @@ -146,18 +291,34 @@ local on_chest_blast = function(pos) minetest.remove_node(pos) end -minetest.register_node("mcl_chests:"..basename, { +local small_name = "mcl_chests:"..basename +local small_textures = tiles_table.small +local left_name = "mcl_chests:"..basename.."_left" +local left_textures = tiles_table.double + +minetest.register_node(small_name, { description = desc, _tt_help = tt_help, _doc_items_longdesc = longdesc, _doc_items_usagehelp = usagehelp, _doc_items_hidden = hidden, - tiles = tiles_table.small, + drawtype = "airlike", + selection_box = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, + }, + collision_box = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, + }, + inventory_image = "mcl_chests_normal.png", + tiles = {"blank.png"}, + _chest_entity_textures = small_textures, paramtype = "light", paramtype2 = "facedir", stack_max = 64, drop = drop, - groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1}, + groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1,chest_entity=1}, is_ground_content = false, sounds = mcl_sounds.node_sound_wood_defaults(), on_construct = function(pos) @@ -189,12 +350,15 @@ minetest.register_node("mcl_chests:"..basename, { minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) + create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true) elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename then minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) + create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true) local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) else minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename, param2 = param2 }) + create_entity(pos, small_name, small_textures, param2, false) end end, after_place_node = function(pos, placer, itemstack, pointed_thing) @@ -235,7 +399,7 @@ minetest.register_node("mcl_chests:"..basename, { if name == "" then name = S("Chest") end - + minetest.show_formspec(clicker:get_player_name(), "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, "size[9,8.75]".. @@ -253,6 +417,8 @@ minetest.register_node("mcl_chests:"..basename, { if on_rightclick_addendum then on_rightclick_addendum(pos, node, clicker) end + + player_chest_open(clicker, pos, small_name, small_textures, node.param2, false) end, on_destruct = function(pos) @@ -265,11 +431,21 @@ minetest.register_node("mcl_chests:"..basename, { on_rotate = simple_rotate, }) -minetest.register_node("mcl_chests:"..basename.."_left", { - tiles = tiles_table.left, +minetest.register_node(left_name, { + drawtype = "nodebox", + selection_box = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.4375, 1.4375, 0.375, 0.4375}, + }, + collision_box = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.4375, 1.4375, 0.375, 0.4375}, + }, + tiles = {"blank.png"}, + _chest_entity_textures = left_textures, paramtype = "light", paramtype2 = "facedir", - groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1}, + groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1,chest_entity=1,double_chest=1}, drop = drop, is_ground_content = false, sounds = mcl_sounds.node_sound_wood_defaults(), @@ -281,6 +457,7 @@ minetest.register_node("mcl_chests:"..basename.."_left", { n.name = "mcl_chests:"..canonical_basename minetest.swap_node(pos, n) end + create_entity(pos, left_name, left_textures, param2, true) end, after_place_node = function(pos, placer, itemstack, pointed_thing) minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) @@ -305,6 +482,7 @@ minetest.register_node("mcl_chests:"..basename.."_left", { minetest.close_formspec(players[pl]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..p.x.."_"..p.y.."_"..p.z) end minetest.swap_node(p, { name = "mcl_chests:"..basename, param2 = param2 }) + create_entity(p, "mcl_chests:"..basename, small_textures, param2, false) end, after_dig_node = drop_items_chest, on_blast = on_chest_blast, @@ -399,16 +577,26 @@ minetest.register_node("mcl_chests:"..basename.."_left", { if on_rightclick_addendum_left then on_rightclick_addendum_left(pos, node, clicker) end + + player_chest_open(clicker, pos, left_name, left_textures, node.param2, true) end, mesecons = mesecons, on_rotate = no_rotate, }) minetest.register_node("mcl_chests:"..basename.."_right", { - tiles = tiles_table.right, + drawtype = "airlike", paramtype = "light", paramtype2 = "facedir", - groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1}, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0}, + }, + collision_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0}, + }, + groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, drop = drop, is_ground_content = false, sounds = mcl_sounds.node_sound_wood_defaults(), @@ -540,6 +728,8 @@ minetest.register_node("mcl_chests:"..basename.."_right", { if on_rightclick_addendum_right then on_rightclick_addendum_right(pos, node, clicker) end + + player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true) end, mesecons = mesecons, on_rotate = no_rotate, @@ -561,29 +751,33 @@ register_chest("chest", chestusage, S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest"), { - small = {"default_chest_top.png", "mcl_chests_chest_bottom.png", + small = {"mcl_chests_normal.png"}, + double = {"mcl_chests_normal_double.png"}, + 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"}, - left = {"default_chest_top_big.png", "default_chest_top_big.png", + --[[left = {"default_chest_top_big.png", "default_chest_top_big.png", "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", "default_chest_side_big.png^[transformFX", "default_chest_front_big.png"}, right = {"default_chest_top_big.png^[transformFX", "default_chest_top_big.png^[transformFX", "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", - "default_chest_side_big.png", "default_chest_front_big.png^[transformFX"}, + "default_chest_side_big.png", "default_chest_front_big.png^[transformFX"},]]-- }, false ) local traptiles = { - small = {"mcl_chests_chest_trapped_top.png", "mcl_chests_chest_trapped_bottom.png", + small = {"mcl_chests_trapped.png"}, + double = {"mcl_chests_trapped_double.png"}, + inv = {"mcl_chests_chest_trapped_top.png", "mcl_chests_chest_trapped_bottom.png", "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", "mcl_chests_chest_trapped_back.png", "mcl_chests_chest_trapped_front.png"}, - left = {"mcl_chests_chest_trapped_top_big.png", "mcl_chests_chest_trapped_top_big.png", + --[[left = {"mcl_chests_chest_trapped_top_big.png", "mcl_chests_chest_trapped_top_big.png", "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", "mcl_chests_chest_trapped_side_big.png^[transformFX", "mcl_chests_chest_trapped_front_big.png"}, right = {"mcl_chests_chest_trapped_top_big.png^[transformFX", "mcl_chests_chest_trapped_top_big.png^[transformFX", "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", - "mcl_chests_chest_trapped_side_big.png", "mcl_chests_chest_trapped_front_big.png^[transformFX"}, + "mcl_chests_chest_trapped_side_big.png", "mcl_chests_chest_trapped_front_big.png^[transformFX"},]]-- } register_chest("trapped_chest", @@ -600,7 +794,6 @@ register_chest("trapped_chest", function(pos, node, clicker) minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on", param2 = node.param2}) mesecon.receptor_on(pos, trapped_chest_mesecons_rules) - player_chest_open(clicker, pos) end, function(pos, node, clicker) local meta = minetest.get_meta(pos) @@ -612,8 +805,6 @@ register_chest("trapped_chest", local pos_other = mcl_util.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) - - player_chest_open(clicker, pos) end, function(pos, node, clicker) local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") @@ -623,8 +814,6 @@ register_chest("trapped_chest", minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_on_left", param2 = node.param2}) mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) - - player_chest_open(clicker, pos) end ) @@ -634,15 +823,7 @@ register_chest("trapped_chest_on", state = mesecon.state.on, rules = trapped_chest_mesecons_rules, }}, - function(pos, node, clicker) - player_chest_open(clicker, pos) - end, - function(pos, node, clicker) - player_chest_open(clicker, pos) - end, - function(pos, node, clicker) - player_chest_open(clicker, pos) - end, + nil, nil, nil, "trapped_chest", "trapped_chest" ) @@ -676,9 +857,9 @@ local function close_if_trapped_chest(pos, player) end end --- Disable trapped chest when it has been closed +-- Disable chest when it has been closed minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname:find("mcl_chests:trapped_chest_") == 1 then + if formname:find("mcl_chests:") == 1 then if fields.quit then player_chest_close(player) end @@ -1001,6 +1182,18 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv end end) +minetest.register_lbm({ + label = "Spawn Chest entities", + name = "mcl_chests:spawn_chest_entities", + nodenames = {"group:chest_entity"}, + run_at_every_load = true, + action = function(pos, node) + local node_name = node.name + local node_def = minetest.registered_nodes[node_name] + local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 + create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest) + end +}) minetest.register_lbm({ -- Disable active/open trapped chests when loaded because nobody could diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d new file mode 100644 index 0000000000000000000000000000000000000000..e82c7e3639236824597be75b0126f74156f491a7 GIT binary patch literal 6075 zcmbVQYiv|S6#jrxc@$7k%0sY%Jf*bV6)1h|DWye;0+B5sCd8tEgdiY=m`I=_|9r$B zD!wr#;g2CPl#3*UM@vi$5eP<&uS680Cj5|x5^WV(^W8Jkdw09--uNY#GqdO1Gjq>; zGvAcj+IXE;2=oC^yL4G{CTx4__NMhSOH0cD7)gILf=H!Osl`j`>YptHo?5@QXP zhsSsC2l?su^Cvhz>zBZ9y8NO15{ys3KYmVsuKc0;_~UDRYSPBH_4CIM{L$*0V}1Pj z_mcmA&ab7KYuGbC_#KYRWDj-=Pt z@ANN1o6i5n1n_o(zxVw)R^$8u|LJe+@^>aZ;rjvq2=z0+^9SEgX#VW}Msa?Q@7@pc z)9>e(kUzx#sa^h1{!snt_s7ra&y_z^pAi3la`o}^+xmt0Pk%6eZ~h$lbFNRW^$pc0 zv_7m4(2?w^KAeBx&p!WP{T+X}{<{Bz^~qk}uKYc%zZ*Z-_xD=Ac-(8lpVh}`yYqjB z@b~`vQoeQk*7zBd*wDEiN=g6OPeR8dDs6L_f(eoi5@2Nhze?$H(^H+XkAD{Vq zTfeUS?)x&=-#DQJOH=ZKHGx;3C_80)80gM7L*7n&R4`3XCy8+x| z`)p4Da4&!&026JW?a2Tp0k{vq6x(NeI)G^arUJO%_SxnYwHUw*04281b_@WotEB+q zw$Ju#0J8u*0AP;ovt0pTE`V|XmA20|4=!FFDBwI~*=M^Jz&rpo0Os31+Y12H1E>S= zpzX6gZ}GxKtSiBK0b6Q$S*|MpHg0}y?N>>|iCf-ED*CjKczmeG=Nv}7ACSw%~>(UN(zWF0NpMN8Jvl7X~jAFY37gc1Mh3M0OR z!iY}-7$Mte$wFE(l9p_wCF^L(Mp`nHmaL?GxPE1_rJwS_a>&rr1OE))q2KZ>Qmo}- zq*%+>NU@gFkzy_HBgNXi5h>R0pGdKGk41{L`!G_h-K&ve?S76FYxjJlSbHu+inV7) zq*!~tM2fX%P^4IUPDP5fXIZ3Jd)`HgrGj!3@}FG$jVdudAK1QSi>ic~Fz*lUM7tyP z|5Mhq=f&5w=Xp2sW(l8kl`x_^+=%X8Bf2w<=&m!OJIaXe79+Y7j3~>ED1(hCJB=vw zj3}#&C}WH$8;s~m8_`uXqAO%Xt8YXrYecJNL@Q!MRlgb`HZv1m95spozn*HbM@xJj1$Md~MkIs>i z3u2awUA*@5y4dfBcEmPZE%1&O*T|@%X_l|)v2G4eH2)Cme5=rFJhE6S@(L}dgIMNt zu|qE&jIDlml6U&^)iR*$dcvthw)wWavo1F7K+M~}uSsr}?@c(BaIv>+UfKZ%&X>J- zb*{JjrJb_r%^?Y=5-yf=U>u+Frh_FHk5zhAx0+@Cd)F$RN`zxw{I460M4V zOVQ}PC!9*SSod9wAK!VTwQNO&_g&#GS!OyuN^(&z>)0pKcoK?fyL}hhHCNbrjNzIwZ*oj3 qw(itG@7On$a_F~WdzPigy4;!PvQr5+2j=T3)~SSxb#b(rdH(|k^~@ar literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj b/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj new file mode 100644 index 000000000..36268146f --- /dev/null +++ b/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj @@ -0,0 +1,91 @@ +# Blender v2.76 (sub 0) OBJ File: 'chest.small.facedir.blend' +# www.blender.org +mtllib chest.small.facedir.mtl +o chest_upper_upper +v 0.062513 -0.063134 -0.500468 +v 0.062513 0.186920 -0.500468 +v 0.062514 -0.063134 -0.437955 +v 0.062514 0.186920 -0.437955 +v -0.062514 -0.063134 -0.500468 +v -0.062514 0.186920 -0.500468 +v -0.062514 -0.063134 -0.437955 +v -0.062514 0.186920 -0.437955 +v 0.437907 0.061263 -0.438085 +v 0.437907 0.373830 -0.438085 +v 0.437907 0.061263 0.437729 +v 0.437907 0.373830 0.437729 +v -0.437907 0.061263 -0.438085 +v -0.437907 0.373830 -0.438085 +v -0.437907 0.061263 0.437729 +v -0.437907 0.373830 0.437729 +v 0.437595 -0.500754 -0.437772 +v 0.437595 0.124381 -0.437772 +v 0.437595 -0.500754 0.437417 +v 0.437595 0.124381 0.437417 +v -0.437595 -0.500754 -0.437772 +v -0.437595 0.124381 -0.437772 +v -0.437595 -0.500754 0.437417 +v -0.437595 0.124381 0.437417 +vt 0.015625 0.921875 +vt 0.015625 0.984375 +vt 0.000000 0.984375 +vt 0.000000 0.921875 +vt 0.093750 0.921875 +vt 0.093750 0.984375 +vt 0.062500 0.984375 +vt 0.062500 0.921875 +vt 0.046875 0.984375 +vt 0.046875 0.921875 +vt 0.078125 0.984375 +vt 0.078125 1.000000 +vt 0.046875 1.000000 +vt 0.015625 1.000000 +vt 0.218750 0.703125 +vt 0.218750 0.781250 +vt 0.000000 0.781250 +vt 0.000000 0.703125 +vt 0.875000 0.703125 +vt 0.875000 0.781250 +vt 0.656250 0.781250 +vt 0.656250 0.703125 +vt 0.437500 0.781250 +vt 0.437500 0.703125 +vt 0.656250 1.000000 +vt 0.437500 1.000000 +vt 0.218750 1.000000 +vt 0.218750 0.328125 +vt 0.218750 0.484375 +vt -0.000000 0.484375 +vt -0.000000 0.328125 +vt 0.875000 0.328125 +vt 0.875000 0.484375 +vt 0.656250 0.484375 +vt 0.656250 0.328125 +vt 0.437500 0.484375 +vt 0.437500 0.328125 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/5/2 4/6/2 8/7/2 7/8/2 +f 7/8/3 8/7/3 6/9/3 5/10/3 +f 5/10/4 6/9/4 2/2/4 1/1/4 +f 3/9/5 7/11/5 5/12/5 1/13/5 +f 8/13/6 4/14/6 2/2/6 6/9/6 +f 9/15/1 10/16/1 12/17/1 11/18/1 +f 11/19/2 12/20/2 16/21/2 15/22/2 +f 15/22/3 16/21/3 14/23/3 13/24/3 +f 13/24/4 14/23/4 10/16/4 9/15/4 +f 11/25/5 15/26/5 13/23/5 9/21/5 +f 16/26/6 12/27/6 10/16/6 14/23/6 +f 17/28/1 18/29/1 20/30/1 19/31/1 +f 19/32/2 20/33/2 24/34/2 23/35/2 +f 23/35/3 24/34/3 22/36/3 21/37/3 +f 21/37/4 22/36/4 18/29/4 17/28/4 +f 19/22/5 23/24/5 21/36/5 17/34/5 +f 24/24/6 20/15/6 18/29/6 22/36/6 diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_double_chest.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_double_chest.b3d new file mode 100644 index 0000000000000000000000000000000000000000..86c44bfeb96b2de946ffe210f23c56910567d2ca GIT binary patch literal 10342 zcmeHMU1(fI6h3K^#@elaiMC2X2}**568A>>lI*N&wi;}bHi=?IY6wJyrfIAREf&m0 ziY6cmS}>rNzW88ku}P&!OE$4ZNQ?=Dza6NxPypa8Xe`NkCq9ft?;a{2G;BNjca6YpB z#q2L(eSE&r^H+)g1rMDs@Ua9@ZhiWEtpDL3#-sh4!zKPg=a2Z*;|1688xfykU;D@6 zd_G+rEuH(!Ey8`ky+A9?-4CMWL{v^hWkghAp7H*AB3eO2*AdZ5^Nja55YZ|kiV@L` z<{9sAA)=d!=q4hnG|zZ{8xh?~L{&tz+C1a^18ps>7>9;uqJb1dAi095Z^thE3EDTm zO=z{rW{36bayEOEL0^>+d8zic^mLA`Khp}u_up68E7S^mLXW+o$G*{H&*-r?^w=|c z>>oY$j-J=*E9@Q5@B@1I06q4K9zH-1f1rmi(DNRB1z+G9enAhPpnoL2rSm{3pMg0i zAIKv6_b~?h=Y6_y*%xkH_Lm!%ed@+#zq@hyY}~kfer{YoV>d3xfg6`&#f@uX-|37w z=G?d(mu_5+T{kYrw;Px5fE$oJ-+AFbJF#;-<)S+CJpqgc1mqBP3vUuzgN39pw!`xlK0a-rwoo;$S7EBo%E zclz=5>dE)xMz1N7`+2qRm4Eo7*PcnJSms`%>G@n)!%Y91-leVc-t?M{YGmXNqx+UC z-zVUoS{V2C?LX_?z5gk-UHzI6jS8+;?50QNyt!lVdBgpKs=ID1AsQuI*%$irD}V7` z8|?8eCWh5~<-1LyQDN@o?6BJYNom8H>X_Ge;YIbuh7*&bQNjfWYxpBOtbTuMc|&IW zaQxKfJ?i#_R7NyPxWP5d?5$|1sp*eDJ-S;xH#n3LjS_B&{vPqwGV;~Q;}s1b+}Rrc z;f-Bt%R?_^M5BUS@G$1g-in5`HU05tMt7?h28S}DQNk5}p~rfUjUSGm+`LCsFQhV} zQDH9D9rVMO8%|7$MuoYsI~Ve=XjGVs_2S&ln{(@_8%u~r1-at4=}T3pOiMY``{`f~t97K36au z8U30Q*FeHr{c$`g1y$dn^+{V$bt7RGT#qw21eD0&#=gdleS>pC9F3!3V%*FhvJYI( zpA6v2&X0nL@qm40=LgOSeIdM%{eXXDep4{z&94)B>t93HS5y_gB_nM zC}jPM*jN(PS6py19_?TFN8{q3(D`HkdARmZM0|>U?H`N7 zes|*kS5RGB$qFK%SWvkox{|E8_)L-&7p^2LE?h}gT)2{~xNs#|ap6j`;=+|=#f2-$ ziVIhg6&J1~D=u6~R$RD}thjI`S#jYmy`Z|be)Mrk@QMXhv7jmzRQ^9zP{pBZf%ex6 zs@cyrW-bg&sGiuYPDo#!d|Opjmg5KQMxp~vzz=SVB?W)t)743f`;CIn?Bs+N__B$< zDPA1ourE05Tb%7jaY`2i=y*CPIfe;AMUZw}Y-cjfsbKK1xQ z@p;w#7YnNY_OHK)fnq^bEU1bF75^JsEU3`_UH_sN3o1So@q_%sfWG(-73c27f2i0G Jf7d@$e*(GW{;mK3 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg b/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg new file mode 100644 index 0000000000000000000000000000000000000000..068d9002fb0db2e50ac3155f53fb3d610386c179 GIT binary patch literal 10768 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 Wgv4}9lfQR9KB%%qfvErHkN+P|`Zjj} literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg b/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg new file mode 100644 index 0000000000000000000000000000000000000000..40b0b93416cbf8a724a255ba202bcbf4ec74f429 GIT binary patch literal 11092 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png new file mode 100644 index 0000000000000000000000000000000000000000..de21d8f2fa5920d54c01431967f5d97c1f8e8355 GIT binary patch literal 1209 zcmV;q1V;ObP)3)75JvM1=~Aan zjVOpj8!06f1vL^)d0vx3}B)`}_ON$G4Ba`117T7y5`HmYffduYV(Rdor$-J-;bJ@s8W{(6RxD z{r2hIZ+!p!ehWhS24s`K*dJe?wlL25zt(^px9Oo}Je#b14Y>a1)+w{=90S^xk+YNepJ@rIkGWoKkNFpI1GuVexTn7X2(w8-ocaE4Bp16lV->j4?69+5p!w@6>vuysXz`j;$}I2*$ZEe&>P3=`w}%+jZy6BgVON)*Izz zy(V*PB#Ff!eU2&QJBw2Y%t@bOq4I%wuBp%QzIvm)tk-0YjUYRF2zJ(-%;kTP)i`6% zS#LzfHks!)zU3ZIpeJLh)03R*=Udr%tQW(N5l_BFf1L6g26LPTu6aUE&(sY-1b^1< z0ukAOUbOVW^-tY^N^k|SUgs2KOxXZ7bxZ>gYXi*f$@!jEb{=C>h)R*%iV>Wu zV)AqW@vP+-7<)^2Z)N8(gdpm<8qm|q&SR%G05J;3=hy}$)87C#cS-}u;~hNV^ob21 zua%w05Oqugh~o@B&MTt52og3eyc*fH&ln)4Dh8fFA2Z6scS^lO^P0@Dv1yZ7 zjHE2Yvlj-VJUKS+)O!2!n#{4eFpIiy;=;}oi~mycn#{4eFt`X$$b~J=llM!>Ycj`{ z3qyWKEZqBel5;6}P3G8KoJDxDi0|ox^vUdbP3C_a+Gev^n$o!vrE?`p=Sq~$l_;Gn zQ94(mbgo3{T#3@T5~Xt`O6N+H&Xp*gD^WUEqI9lA>0F7@xe}#wMxM>8Vl(nQc6Id= X*tZtL<|9;J00000NkvXXu0mjffNDzn literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png new file mode 100644 index 0000000000000000000000000000000000000000..95f768f97c0e7f1243b73df472b10174c7e69246 GIT binary patch literal 2011 zcmZ`&dpr|*AO5W!#2QJogC#|j>xyZFA%_)lkW$UY4vza}TR4YN4(BN3QW56TQHq+; zi?GZk9LXis$YGPQ*~o1n6X*SS|9Rhk-ao$2AJ6l7p3mp`JfCm6`*|n0g1Q0#0FHA$ z;{gCj1^{4p%K`v~IY~(XfbW9rT3Cj$VGk8<`Q1EAQta}cq8Z5seUj)HS_ zlp9x2mRFHc4IZ)v03aximnfc*fs|Okm;eyv7aTz`jtHO}GBY+cHV;TW5deVP54baS zUU9yki(cN;4cMC|R7c00^ixU6yf7pKRaQH2MA^*Lbe~N7P@9+OUXwN}Q;EXG((=+z z^t$Fs;m`zGT5KFQyDb)OKB=l16pP_2D>HqKE8jLGjg7D6rn_z(Xxy&xefi5~pGD-t za*rEqLW2eiEjIf&Bk3)??U`QfX-T5#?VE(;ks5-Vnr8@fiD3lujWoH&In-?eEEQgD zjxp5+FPCMla}$L+%}oMlixJI*-Y0OPb`#wUOB+VUB7~y_I$Py5NJAJX%ndSfcgml~ zP{{o`5e$ss;r%i%==(DtICE#;^Mf=OKe*8su~24Ov|2!)EK#W*i^SInhx*N(nwtd7 zKjMyrgMAlld9#L(9nG^Uszxe9!IB=(S0HP_qXG%Zh7=>B|5d4nJFg{v1%^d2$|3j4 zuE5lkVfNADaK=xlOg^%R0MpQ+ibJ83Pl9cQWef3>(`K)F(UXlh-2Wts1G*_)g>Mtq_$Z#>5M8HGb$L zScN4IbUaO;llbPf=y~US+m&6x`ixY=XtbRYP3gzcAo^*wXg8@afjUrYjx8cL6Hcj@ zSq$sJkC{IQm|ifeL|=;an5p)3-UZ+B0icZ>?$MSu=AG@ViYu<>z z`{%6orqInZCPLV6u4|!)F7%Pu*)^+*jq}aBp7mESgB3fvtt%{7#U6v7PU)BF`T6|u zCAJu)=Gh{#Jdf|5Et9mKvb2CVtyuVgEnn5-cYp)U$V$85d&_I5Q z(8rJuW!?+rJjhfXIQ+LJ{;CK6gBE;fch?~dzMYd?|LqvUz{?4ZT^+=H$tfm9Kq*P9 z$MMk(#Cq97$8;(UIO^^?8h|yC-hercrkz@=prqzAPF-P!K;7>c?vuF;ptDx*p#h81_3_57 zP;k?(+^{aS&p#`Nmd#$J9;9ODqvmlU1rvO9!{lL&whpY3cfkDI+=gN(T#zQIkFk{h+1bwz|_i`omhfNCEu819_{+8sYg)NP;5ear}s90 z{ZEMc@-=T~?}w6e2l<4=@T@Gc0X@>Gdryyz&rZh_c+@xQ(#rH@hr+>&`oCpAJ~nJ2 zO6W1g(Ze$$TxS#VjAbo(x;rbE)-3s0&)C*IZN)IqC0aJWUMngN0~C=bU#ywYI2JiJ zbY1eut(!{T6Kq5H`HC5(&KCQ3k?pAXPz8@R(D3&BX)r9 zr1cq-Z&`BxG^I(g0vUrhP17sp(|$KAt%=)>LLDs^$L-6LKd1F%txywj>$*$SSoOmA zx>dzSLaOU7IYF;BvQp8*Lh$FaF{JP$sfzdh5^^xZ4f+1XfYX(FtAU_yFLv#6w!lFV zGo9_w{cw{|SW@VKzQX`+{U6Td-wB-(KRox^JbHClcc$>gFQVK!Ioh`P-K_vmQErP| z^DDeU(b@cQ>ml6*k5RAY>4odY(fJ*ZhIM0=DCsTx(RYoTMqcgYSV#S3zr$+QWm9@5 rpuZdH;A7U?v|+gX@&6-{X9NNQ?*42UlxyAu00210^Jf_L#2fzx3KZfx literal 0 HcmV?d00001 From ae59f9fd3c363cef9e9afcfe0441ca939ac476e2 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 3 Jan 2021 18:16:12 +0100 Subject: [PATCH 02/11] Inventory + Screwdriver support --- mods/ITEMS/mcl_chests/init.lua | 131 +++++++++++++++++++++++---------- 1 file changed, 92 insertions(+), 39 deletions(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index fdfae533a..ff533ef5a 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -1,12 +1,6 @@ local S = minetest.get_translator("mcl_chests") local mod_doc = minetest.get_modpath("doc") -local no_rotate, simple_rotate -if minetest.get_modpath("screwdriver") then - no_rotate = screwdriver.disallow - simple_rotate = screwdriver.rotate_simple -end - -- Chest Entity local entity_animations = {} local entity_animation_speed = 25 @@ -35,7 +29,7 @@ minetest.register_entity("mcl_chests:chest", { pointable = false, physical = false, }, - + set_animation = function(self, animname) local anim = entity_animations[animname] self.object:set_animation(anim.bounds, entity_animation_speed, 0, false) @@ -44,7 +38,7 @@ minetest.register_entity("mcl_chests:chest", { self.sched_time = anim.sched_time end end, - + open = function(self, playername) self.players[playername] = true if not self.is_open then @@ -55,7 +49,7 @@ minetest.register_entity("mcl_chests:chest", { }) end end, - + close = function(self, playername) local playerlist = self.players playerlist[playername] = nil @@ -76,10 +70,18 @@ minetest.register_entity("mcl_chests:chest", { self.node_name = node_name local obj = self.object obj:set_properties({textures = textures}) - obj:set_yaw(minetest.dir_to_yaw(dir)) obj:set_properties({mesh = double and "mcl_chests_double_chest.b3d" or "mcl_chests_chest.b3d"}) + self:set_yaw(dir) end, - + + reinitialize = function(self, node_name) + self.node_name = node_name + end, + + set_yaw = function(self, dir) + self.object:set_yaw(minetest.dir_to_yaw(dir)) + end, + check = function(self) local node_pos, node_name = self.node_pos, self.node_name if not node_pos or not node_name then @@ -97,7 +99,7 @@ minetest.register_entity("mcl_chests:chest", { self:set_animation("closed") self.players = {} end, - + on_step = function(self, dtime) local sched_anim, sched_time = self.sched_anim, self.sched_time if not self:check() then @@ -149,6 +151,20 @@ local function find_or_create_entity(pos, node_name, textures, param2, double) return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, dir, entity_pos) end +local no_rotate, simple_rotate +if minetest.get_modpath("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 + local nodename = node.name + local nodedef = minetest.registered_nodes[nodename] + find_or_create_entity(pos, nodename, nodedef._chest_entity_textures, new_param2, false):set_yaw(minetest.facedir_to_dir(new_param2)) + else + return false + end + end +end + --[[ List of open chests. Key: Player name Value: @@ -291,11 +307,34 @@ local on_chest_blast = function(pos) minetest.remove_node(pos) end -local small_name = "mcl_chests:"..basename +local small_name = "mcl_chests:"..basename.."_small" local small_textures = tiles_table.small local left_name = "mcl_chests:"..basename.."_left" local left_textures = tiles_table.double +minetest.register_node("mcl_chests:"..basename, { + description = desc, + _tt_help = tt_help, + _doc_items_longdesc = longdesc, + _doc_items_usagehelp = usagehelp, + _doc_items_hidden = hidden, + drawtype = "mesh", + mesh = "mcl_chests_chest.obj", + tiles = small_textures, + paramtype = "light", + paramtype2 = "facedir", + stack_max = 64, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_construct = function(pos, node) + local node = minetest.get_node(pos) + node.name = small_name + minetest.set_node(pos, node) + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) + end, +}) + minetest.register_node(small_name, { description = desc, _tt_help = tt_help, @@ -311,7 +350,6 @@ minetest.register_node(small_name, { type = "fixed", fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, }, - inventory_image = "mcl_chests_normal.png", tiles = {"blank.png"}, _chest_entity_textures = small_textures, paramtype = "light", @@ -346,18 +384,18 @@ minetest.register_node(small_name, { -- BEGIN OF LISTRING WORKAROUND inv:set_size("input", 1) -- END OF LISTRING WORKAROUND - if minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "right")).name == "mcl_chests:"..canonical_basename then + if minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "right")).name == "mcl_chests:"..canonical_basename.."_small" then minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true) - elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename then + elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename.."_small" then minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true) local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) else - minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename, param2 = param2 }) + minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename.."_small", param2 = param2 }) create_entity(pos, small_name, small_textures, param2, false) end end, @@ -399,7 +437,7 @@ minetest.register_node(small_name, { if name == "" then name = S("Chest") end - + minetest.show_formspec(clicker:get_player_name(), "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, "size[9,8.75]".. @@ -417,7 +455,7 @@ minetest.register_node(small_name, { if on_rightclick_addendum then on_rightclick_addendum(pos, node, clicker) end - + player_chest_open(clicker, pos, small_name, small_textures, node.param2, false) end, @@ -435,11 +473,11 @@ minetest.register_node(left_name, { drawtype = "nodebox", selection_box = { type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 1.4375, 0.375, 0.4375}, + fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, }, collision_box = { type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 1.4375, 0.375, 0.4375}, + fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, }, tiles = {"blank.png"}, _chest_entity_textures = left_textures, @@ -454,7 +492,7 @@ minetest.register_node(left_name, { local param2 = n.param2 local p = mcl_util.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 + n.name = "mcl_chests:"..canonical_basename.."_small" minetest.swap_node(pos, n) end create_entity(pos, left_name, left_textures, param2, true) @@ -464,7 +502,7 @@ minetest.register_node(left_name, { end, on_destruct = function(pos) local n = minetest.get_node(pos) - if n.name == "mcl_chests:"..basename then + if n.name == small_name then return end @@ -481,8 +519,8 @@ minetest.register_node(left_name, { for pl=1, #players do minetest.close_formspec(players[pl]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..p.x.."_"..p.y.."_"..p.z) end - minetest.swap_node(p, { name = "mcl_chests:"..basename, param2 = param2 }) - create_entity(p, "mcl_chests:"..basename, small_textures, param2, false) + minetest.swap_node(p, { name = small_name, param2 = param2 }) + create_entity(p, small_name, small_textures, param2, false) end, after_dig_node = drop_items_chest, on_blast = on_chest_blast, @@ -577,7 +615,7 @@ minetest.register_node(left_name, { if on_rightclick_addendum_left then on_rightclick_addendum_left(pos, node, clicker) end - + player_chest_open(clicker, pos, left_name, left_textures, node.param2, true) end, mesecons = mesecons, @@ -590,11 +628,11 @@ minetest.register_node("mcl_chests:"..basename.."_right", { paramtype2 = "facedir", selection_box = { type = "fixed", - fixed = {0, 0, 0, 0, 0, 0}, + fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, }, collision_box = { type = "fixed", - fixed = {0, 0, 0, 0, 0, 0}, + fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, }, groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, drop = drop, @@ -605,7 +643,7 @@ minetest.register_node("mcl_chests:"..basename.."_right", { local param2 = n.param2 local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_left" then - n.name = "mcl_chests:"..canonical_basename + n.name = "mcl_chests:"..canonical_basename.."_small" minetest.swap_node(pos, n) end end, @@ -614,7 +652,7 @@ minetest.register_node("mcl_chests:"..basename.."_right", { end, on_destruct = function(pos) local n = minetest.get_node(pos) - if n.name == "mcl_chests:"..basename then + if n.name == small_name then return end @@ -631,7 +669,8 @@ minetest.register_node("mcl_chests:"..basename.."_right", { for pl=1, #players do minetest.close_formspec(players[pl]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..p.x.."_"..p.y.."_"..p.z) end - minetest.swap_node(p, { name = "mcl_chests:"..basename, param2 = param2 }) + minetest.swap_node(p, { name = small_name, param2 = param2 }) + create_entity(p, small_name, small_textures, param2, false) local meta = minetest.get_meta(pos) end, after_dig_node = drop_items_chest, @@ -728,7 +767,7 @@ minetest.register_node("mcl_chests:"..basename.."_right", { if on_rightclick_addendum_right then on_rightclick_addendum_right(pos, node, clicker) end - + player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true) end, mesecons = mesecons, @@ -736,8 +775,8 @@ minetest.register_node("mcl_chests:"..basename.."_right", { }) if mod_doc then - doc.add_entry_alias("nodes", "mcl_chests:"..basename, "nodes", "mcl_chests:"..basename.."_left") - doc.add_entry_alias("nodes", "mcl_chests:"..basename, "nodes", "mcl_chests:"..basename.."_right") + doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_left") + doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_right") end -- END OF register_chest FUNCTION BODY @@ -1182,16 +1221,30 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv end end) +local function select_and_spawn_entity(pos, node) + local node_name = node.name + local node_def = minetest.registered_nodes[node_name] + local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 + create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest) +end + minetest.register_lbm({ label = "Spawn Chest entities", name = "mcl_chests:spawn_chest_entities", nodenames = {"group:chest_entity"}, run_at_every_load = true, + action = select_and_spawn_entity, +}) + +minetest.register_lbm({ + label = "Replace old chest nodes", + name = "mcl_chests:replace_old", + nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on"}, + run_at_every_load = false, action = function(pos, node) - local node_name = node.name - local node_def = minetest.registered_nodes[node_name] - local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 - create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest) + node.name = node.name .. "_small" + minetest.set_node(pos, node) + select_and_spawn_entity(pos, node) end }) @@ -1201,7 +1254,7 @@ minetest.register_lbm({ -- Fixes redstone weirdness. label = "Disable active trapped chests", name = "mcl_chests:reset_trapped_chests", - nodenames = { "mcl_chests:trapped_chest_on", "mcl_chests:trapped_chest_on_left", "mcl_chests:trapped_chest_on_right" }, + nodenames = { "mcl_chests:trapped_chest_on_small", "mcl_chests:trapped_chest_on_left", "mcl_chests:trapped_chest_on_right" }, run_at_every_load = true, action = function(pos, node) minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) From 978aa38196a5c29e1991b318d11cef3b65bc9586 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 3 Jan 2021 18:52:24 +0100 Subject: [PATCH 03/11] Trapped chests support --- mods/ITEMS/mcl_chests/init.lua | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index ff533ef5a..d8ef0f188 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -69,8 +69,10 @@ minetest.register_entity("mcl_chests:chest", { self.node_pos = node_pos self.node_name = node_name local obj = self.object - obj:set_properties({textures = textures}) - obj:set_properties({mesh = double and "mcl_chests_double_chest.b3d" or "mcl_chests_chest.b3d"}) + obj:set_properties({ + textures = textures, + mesh = double and "mcl_chests_double_chest.b3d" or "mcl_chests_chest.b3d", + }) self:set_yaw(dir) end, @@ -204,11 +206,13 @@ local trapped_chest_mesecons_rules = mesecon.rules.pplate local chest_update_after_close = function(pos) local node = minetest.get_node(pos) - if node.name == "mcl_chests:trapped_chest_on" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest", param2 = node.param2}) + if node.name == "mcl_chests:trapped_chest_on_small" then + 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):reinitialize("mcl_chests:trapped_chest_small") 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", {"mcl_chests_trapped_double.png"}, node.param2, true):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") @@ -220,6 +224,7 @@ local chest_update_after_close = function(pos) local pos_other = mcl_util.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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) end end @@ -831,7 +836,8 @@ register_chest("trapped_chest", rules = trapped_chest_mesecons_rules, }}, function(pos, node, clicker) - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on", param2 = node.param2}) + minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_small", param2 = node.param2}) + find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", {"mcl_chests_trapped.png"}, node.param2, false):reinitialize("mcl_chests:trapped_chest_on_small") mesecon.receptor_on(pos, trapped_chest_mesecons_rules) end, function(pos, node, clicker) @@ -839,6 +845,7 @@ 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", {"mcl_chests_trapped_double.png"}, node.param2, true):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") @@ -852,6 +859,7 @@ register_chest("trapped_chest", 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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_on_left") mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) end ) @@ -870,13 +878,15 @@ register_chest("trapped_chest_on", local function close_if_trapped_chest(pos, player) local node = minetest.get_node(pos) - if node.name == "mcl_chests:trapped_chest_on" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest", param2 = node.param2}) + if node.name == "mcl_chests:trapped_chest_on_small" then + 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):reinitialize("mcl_chests:trapped_chest_small") mesecon.receptor_off(pos, trapped_chest_mesecons_rules) player_chest_close(player) 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", {"mcl_chests_trapped_double.png"}, node.param2, true):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") @@ -890,6 +900,7 @@ local function close_if_trapped_chest(pos, player) local pos_other = mcl_util.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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) player_chest_close(player) @@ -1242,9 +1253,14 @@ minetest.register_lbm({ nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on"}, run_at_every_load = false, action = function(pos, node) - node.name = node.name .. "_small" + local node_name = node.name + node.name = node_name .. "_small" minetest.set_node(pos, node) select_and_spawn_entity(pos, node) + if node_name == "mcl_chests:trapped_chest_on" then + minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) + chest_update_after_close(pos) + end end }) From 2d9ec679c0552ad0c21bc995742133aeda0b2d5a Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 3 Jan 2021 18:55:41 +0100 Subject: [PATCH 04/11] Fix floating chest entity --- mods/ITEMS/mcl_chests/init.lua | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index d8ef0f188..0a5883f77 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -121,7 +121,7 @@ minetest.register_entity("mcl_chests:chest", { local function get_entity_pos(pos, dir, double) pos = vector.new(pos) - pos.y = pos.y - 0.4375 + pos.y = pos.y - 0.5 if double then local add, mul, vec, cross = vector.add, vector.multiply, vector.new, vector.cross pos = add(pos, mul(cross(dir, vec(0, 1, 0)), -0.5)) @@ -476,11 +476,7 @@ minetest.register_node(small_name, { minetest.register_node(left_name, { drawtype = "nodebox", - selection_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, - }, - collision_box = { + node_box = { type = "fixed", fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, }, @@ -628,17 +624,14 @@ minetest.register_node(left_name, { }) minetest.register_node("mcl_chests:"..basename.."_right", { - drawtype = "airlike", + drawtype = "nodebox", paramtype = "light", paramtype2 = "facedir", - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - collision_box = { + node_box = { type = "fixed", fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, }, + tiles = {"blank.png"}, groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, drop = drop, is_ground_content = false, From 84cd8195c6dd8b7455e9420da4df187b67421a44 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 3 Jan 2021 19:05:07 +0100 Subject: [PATCH 05/11] Fix invalid migration of small chests --- mods/ITEMS/mcl_chests/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index 0a5883f77..cfeb6a682 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -1248,7 +1248,7 @@ minetest.register_lbm({ action = function(pos, node) local node_name = node.name node.name = node_name .. "_small" - minetest.set_node(pos, node) + minetest.swap_node(pos, node) select_and_spawn_entity(pos, node) if node_name == "mcl_chests:trapped_chest_on" then minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) From 41a364b3199456ad239bdb9501cbe7f2e2fd176b Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 3 Jan 2021 20:08:53 +0100 Subject: [PATCH 06/11] Crack texture is now displayed --- mods/ITEMS/mcl_chests/init.lua | 14 +++++--------- .../mcl_chests/textures/mcl_chests_blank.png | Bin 0 -> 570 bytes 2 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index cfeb6a682..b4f8e5ae0 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -346,16 +346,12 @@ minetest.register_node(small_name, { _doc_items_longdesc = longdesc, _doc_items_usagehelp = usagehelp, _doc_items_hidden = hidden, - drawtype = "airlike", - selection_box = { + drawtype = "nodebox", + node_box = { type = "fixed", fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, }, - collision_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - tiles = {"blank.png"}, + tiles = {"mcl_chests_blank.png"}, _chest_entity_textures = small_textures, paramtype = "light", paramtype2 = "facedir", @@ -480,7 +476,7 @@ minetest.register_node(left_name, { type = "fixed", fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, }, - tiles = {"blank.png"}, + tiles = {"mcl_chests_blank.png"}, _chest_entity_textures = left_textures, paramtype = "light", paramtype2 = "facedir", @@ -631,7 +627,7 @@ minetest.register_node("mcl_chests:"..basename.."_right", { type = "fixed", fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, }, - tiles = {"blank.png"}, + tiles = {"mcl_chests_blank.png"}, groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, drop = drop, is_ground_content = false, diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..baee128d431db678799b44e683939c65a391d717 GIT binary patch literal 570 zcmV-A0>%A_P)EX>4Tx04R}tkv&MmP!xqvQ;Q-MhjtKg$WWauNELC^DionYs1;guFnQ@8G-*gu zTpR`0f`dPcRRQHpmtPfoUlBkM5rmMCnPtpLQX0PXbx++?cX6KO-}h$?s0E7w0g-r?8KzCVK|H-_ z8=UuvqpU2e#OK80CS8#Dk?V@bZ=6dm3p_JwW;64|QDU*w#Yz{mvZ)bI5yw=bb>jVfs16O*-Uuyz0pQJZB zTI>iI+y*YLJDRcwT zjFl*R-RIqX-E;f5r#-(PFD!D5_eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{000t6L_t(I%VS^|1*2dTi~T%77XSbN literal 0 HcmV?d00001 From ce4e86549bf180826546a5bb28c83f1148a7eb57 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 4 Jan 2021 11:26:07 +0100 Subject: [PATCH 07/11] Enderchest Support --- mods/ITEMS/mcl_chests/init.lua | 136 +++++++++++------- ..._chest.b3d => mcl_chests_chest_double.b3d} | Bin mods/ITEMS/mcl_chests/sounds/attributions.txt | 2 + .../sounds/mcl_chests_enderchest_close.ogg | Bin 0 -> 17310 bytes .../sounds/mcl_chests_enderchest_open.ogg | Bin 0 -> 14882 bytes 5 files changed, 88 insertions(+), 50 deletions(-) rename mods/ITEMS/mcl_chests/models/{mcl_chests_double_chest.b3d => mcl_chests_chest_double.b3d} (100%) create mode 100644 mods/ITEMS/mcl_chests/sounds/attributions.txt create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index b4f8e5ae0..ecd21cba0 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -44,7 +44,7 @@ minetest.register_entity("mcl_chests:chest", { if not self.is_open then self.is_open = true self:set_animation("open") - minetest.sound_play("default_chest_open", { + minetest.sound_play(self.sound_prefix .. "_open", { pos = self.node_pos, }) end @@ -59,19 +59,20 @@ minetest.register_entity("mcl_chests:chest", { end self.is_open = false self:set_animation("close") - minetest.sound_play("default_chest_close", { + minetest.sound_play(self.sound_prefix .. "_close", { pos = self.node_pos, }) end end, - initialize = function(self, node_pos, node_name, textures, dir, double) + initialize = function(self, node_pos, node_name, textures, dir, double, sound_prefix, mesh_prefix) self.node_pos = node_pos self.node_name = node_name + self.sound_prefix = sound_prefix local obj = self.object obj:set_properties({ textures = textures, - mesh = double and "mcl_chests_double_chest.b3d" or "mcl_chests_chest.b3d", + mesh = mesh_prefix .. (double and "_double" or "") .. ".b3d", }) self:set_yaw(dir) end, @@ -138,19 +139,19 @@ local function find_entity(pos) end end -local function create_entity(pos, node_name, textures, param2, double, dir, entity_pos) +local function create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, dir, entity_pos) dir = dir or minetest.facedir_to_dir(param2) entity_pos = entity_pos or get_entity_pos(pos, dir, double) local obj = minetest.add_entity(entity_pos, "mcl_chests:chest") local luaentity = obj:get_luaentity() - luaentity:initialize(pos, node_name, textures, dir, double) + luaentity:initialize(pos, node_name, textures, dir, double, sound_prefix, mesh_prefix) return luaentity end -local function find_or_create_entity(pos, node_name, textures, param2, double) +local function find_or_create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix) local dir = minetest.facedir_to_dir(param2) local entity_pos = get_entity_pos(pos, dir, double) - return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, dir, entity_pos) + return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, dir, entity_pos) end local no_rotate, simple_rotate @@ -160,7 +161,7 @@ if minetest.get_modpath("screwdriver") then if screwdriver.rotate_simple(pos, node, user, mode, new_param2) ~= false then local nodename = node.name local nodedef = minetest.registered_nodes[nodename] - find_or_create_entity(pos, nodename, nodedef._chest_entity_textures, new_param2, false):set_yaw(minetest.facedir_to_dir(new_param2)) + find_or_create_entity(pos, nodename, nodedef._chest_entity_textures, new_param2, false, nodedef._chest_entity_sound, nodedef._chest_entity_mesh):set_yaw(minetest.facedir_to_dir(new_param2)) else return false end @@ -174,10 +175,10 @@ Value: Otherwise: nil ]] local open_chests = {} -- To be called if a player opened a chest -local player_chest_open = function(player, pos, node_name, textures, param2, double) +local player_chest_open = function(player, pos, node_name, textures, param2, double, sound, mesh) local name = player:get_player_name() - open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double} - find_or_create_entity(pos, node_name, textures, param2, double):open(name) + open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double, sound = sound, mesh = mesh} + find_or_create_entity(pos, node_name, textures, param2, double, sound, mesh):open(name) end -- Simple protection checking functions @@ -208,11 +209,11 @@ local chest_update_after_close = function(pos) if node.name == "mcl_chests:trapped_chest_on_small" then 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):reinitialize("mcl_chests:trapped_chest_small") + find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_small") 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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_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") @@ -224,7 +225,7 @@ local chest_update_after_close = function(pos) local pos_other = mcl_util.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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) end end @@ -236,7 +237,7 @@ local player_chest_close = function(player) if open_chest == nil then return end - find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2, open_chest.double):close(name) + find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2, open_chest.double, open_chest.sound, open_chest.mesh):close(name) chest_update_after_close(open_chest.pos) open_chests[name] = nil @@ -330,6 +331,7 @@ minetest.register_node("mcl_chests:"..basename, { paramtype2 = "facedir", stack_max = 64, sounds = mcl_sounds.node_sound_wood_defaults(), + groups = {deco_block=1}, on_construct = function(pos, node) local node = minetest.get_node(pos) node.name = small_name @@ -353,11 +355,13 @@ minetest.register_node(small_name, { }, tiles = {"mcl_chests_blank.png"}, _chest_entity_textures = small_textures, + _chest_entity_sound = "default_chest", + _chest_entity_mesh = "mcl_chests_chest", paramtype = "light", paramtype2 = "facedir", stack_max = 64, drop = drop, - groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1,chest_entity=1}, + groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1,chest_entity=1, not_in_creative_inventory=1}, is_ground_content = false, sounds = mcl_sounds.node_sound_wood_defaults(), on_construct = function(pos) @@ -389,15 +393,15 @@ minetest.register_node(small_name, { minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) - create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true) + create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest") elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename.."_small" then minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) - create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true) + create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest") local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) else minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename.."_small", param2 = param2 }) - create_entity(pos, small_name, small_textures, param2, false) + create_entity(pos, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest") end end, after_place_node = function(pos, placer, itemstack, pointed_thing) @@ -457,7 +461,7 @@ minetest.register_node(small_name, { on_rightclick_addendum(pos, node, clicker) end - player_chest_open(clicker, pos, small_name, small_textures, node.param2, false) + player_chest_open(clicker, pos, small_name, small_textures, node.param2, false, "default_chest", "mcl_chests_chest") end, on_destruct = function(pos) @@ -478,6 +482,8 @@ minetest.register_node(left_name, { }, tiles = {"mcl_chests_blank.png"}, _chest_entity_textures = left_textures, + _chest_entity_sound = "default_chest", + _chest_entity_mesh = "mcl_chests_chest", paramtype = "light", paramtype2 = "facedir", groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1,chest_entity=1,double_chest=1}, @@ -492,7 +498,7 @@ minetest.register_node(left_name, { n.name = "mcl_chests:"..canonical_basename.."_small" minetest.swap_node(pos, n) end - create_entity(pos, left_name, left_textures, param2, true) + create_entity(pos, left_name, left_textures, param2, true, "default_chest", "mcl_chests_chest") end, after_place_node = function(pos, placer, itemstack, pointed_thing) minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) @@ -517,7 +523,7 @@ minetest.register_node(left_name, { minetest.close_formspec(players[pl]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..p.x.."_"..p.y.."_"..p.z) end minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false) + create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest") end, after_dig_node = drop_items_chest, on_blast = on_chest_blast, @@ -613,7 +619,7 @@ minetest.register_node(left_name, { on_rightclick_addendum_left(pos, node, clicker) end - player_chest_open(clicker, pos, left_name, left_textures, node.param2, true) + player_chest_open(clicker, pos, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") end, mesecons = mesecons, on_rotate = no_rotate, @@ -664,7 +670,7 @@ minetest.register_node("mcl_chests:"..basename.."_right", { minetest.close_formspec(players[pl]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..p.x.."_"..p.y.."_"..p.z) end minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false) + create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest") local meta = minetest.get_meta(pos) end, after_dig_node = drop_items_chest, @@ -762,7 +768,7 @@ minetest.register_node("mcl_chests:"..basename.."_right", { on_rightclick_addendum_right(pos, node, clicker) end - player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true) + player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") end, mesecons = mesecons, on_rotate = no_rotate, @@ -826,7 +832,7 @@ register_chest("trapped_chest", }}, function(pos, node, clicker) minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", {"mcl_chests_trapped.png"}, node.param2, false):reinitialize("mcl_chests:trapped_chest_on_small") + find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_on_small") mesecon.receptor_on(pos, trapped_chest_mesecons_rules) end, function(pos, node, clicker) @@ -834,7 +840,7 @@ 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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_on_left") + find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_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") @@ -848,7 +854,7 @@ register_chest("trapped_chest", 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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_on_left") + find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_on_left") mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) end ) @@ -869,13 +875,13 @@ local function close_if_trapped_chest(pos, player) if node.name == "mcl_chests:trapped_chest_on_small" then 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):reinitialize("mcl_chests:trapped_chest_small") + find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_small") mesecon.receptor_off(pos, trapped_chest_mesecons_rules) player_chest_close(player) 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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_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") @@ -889,7 +895,7 @@ local function close_if_trapped_chest(pos, player) local pos_other = mcl_util.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", {"mcl_chests_trapped_double.png"}, node.param2, true):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) player_chest_close(player) @@ -930,6 +936,26 @@ minetest.register_craft({ burntime = 15 }) +minetest.register_node("mcl_chests:ender_chest", { + description = S("Ender Chest"), + _tt_help = S("27 interdimensional inventory slots") .. "\n" .. S("Put items inside, retrieve them from any ender chest"), + _doc_items_longdesc = S("Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players."), + _doc_items_usagehelp = S("Rightclick the ender chest to access your personal interdimensional inventory."), + drawtype = "mesh", + mesh = "mcl_chests_chest.obj", + tiles = {"mcl_chests_ender.png"}, + paramtype = "light", + paramtype2 = "facedir", + stack_max = 64, + groups = {deco_block=1}, + sounds = mcl_sounds.node_sound_stone_defaults(), + on_construct = function(pos, node) + local node = minetest.get_node(pos) + node.name = "mcl_chests:ender_chest_small" + minetest.set_node(pos, node) + end, +}) + local formspec_ender_chest = "size[9,8.75]".. "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Ender Chest"))).."]".. "list[current_player;enderchest;0,0.5;9,3;]".. @@ -943,17 +969,26 @@ local formspec_ender_chest = "size[9,8.75]".. "listring[current_player;main]" -minetest.register_node("mcl_chests:ender_chest", { +minetest.register_node("mcl_chests:ender_chest_small", { description = S("Ender Chest"), _tt_help = S("27 interdimensional inventory slots") .. "\n" .. S("Put items inside, retrieve them from any ender chest"), _doc_items_longdesc = S("Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players."), _doc_items_usagehelp = S("Rightclick the ender chest to access your personal interdimensional inventory."), - tiles = {"mcl_chests_ender_chest_top.png", "mcl_chests_ender_chest_bottom.png", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, + }, + _chest_entity_textures = {"mcl_chests_ender.png"}, + _chest_entity_sound = "mcl_chests_enderchest", + _chest_entity_mesh = "mcl_chests_chest", + tiles = {"mcl_chests_blank.png"}, + --[[{"mcl_chests_ender_chest_top.png", "mcl_chests_ender_chest_bottom.png", "mcl_chests_ender_chest_right.png", "mcl_chests_ender_chest_left.png", - "mcl_chests_ender_chest_back.png", "mcl_chests_ender_chest_front.png"}, + "mcl_chests_ender_chest_back.png", "mcl_chests_ender_chest_front.png"},]]-- -- Note: The “container” group is missing here because the ender chest does not -- have an inventory on its own - groups = {pickaxey=1, deco_block=1, material_stone=1}, + groups = {pickaxey=1, deco_block=1, material_stone=1, chest_entity=1, not_in_creative_inventory=1}, is_ground_content = false, paramtype = "light", light_source = 7, @@ -963,10 +998,19 @@ minetest.register_node("mcl_chests:ender_chest", { on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", formspec_ender_chest) + create_entity(pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest") + end, + on_rightclick = function(pos, node, clicker) + player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest") + end, + on_receive_fields = function(pos, formname, fields, sender) + if fields.quit then + player_chest_close(sender) + end end, _mcl_blast_resistance = 3000, _mcl_hardness = 22.5, - _mcl_silk_touch_drop = true, + _mcl_silk_touch_drop = {"mcl_chests:ender_chest"}, on_rotate = simple_rotate, }) @@ -1225,7 +1269,7 @@ local function select_and_spawn_entity(pos, node) local node_name = node.name local node_def = minetest.registered_nodes[node_name] local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 - create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest) + create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh) end minetest.register_lbm({ @@ -1239,7 +1283,7 @@ minetest.register_lbm({ minetest.register_lbm({ label = "Replace old chest nodes", name = "mcl_chests:replace_old", - nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on"}, + nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on", "mcl_chests:ender_chest"}, run_at_every_load = false, action = function(pos, node) local node_name = node.name @@ -1249,6 +1293,9 @@ minetest.register_lbm({ if node_name == "mcl_chests:trapped_chest_on" then minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) chest_update_after_close(pos) + elseif node_name == "mcl_chests:ender_chest" then + local meta = minetest.get_meta(pos) + meta:set_string("formspec", formspec_ender_chest) end end }) @@ -1267,17 +1314,6 @@ minetest.register_lbm({ end, }) --- Legacy -minetest.register_lbm({ - label = "Update ender chest formspecs (0.60.0)", - name = "mcl_chests:update_ender_chest_formspecs_0_60_0", - nodenames = { "mcl_chests:ender_chest" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_ender_chest) - end, -}) minetest.register_lbm({ label = "Update shulker box formspecs (0.60.0)", name = "mcl_chests:update_shulker_box_formspecs_0_60_0", diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_double_chest.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d similarity index 100% rename from mods/ITEMS/mcl_chests/models/mcl_chests_double_chest.b3d rename to mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d diff --git a/mods/ITEMS/mcl_chests/sounds/attributions.txt b/mods/ITEMS/mcl_chests/sounds/attributions.txt new file mode 100644 index 000000000..2943aecc0 --- /dev/null +++ b/mods/ITEMS/mcl_chests/sounds/attributions.txt @@ -0,0 +1,2 @@ +default_chest_open and default_chest_close - Taken from minetest_game https://github.com/minetest/minetest_game +mcl_chests_enderchest_open and mcl_chests_enderchest_close - https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/resource-packs/1245112-snowsong-the-epic-sound-pack-sound-resource-pack diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7ecf4c98d6c16864eaf0bb1284a22cafa11e4d97 GIT binary patch literal 17310 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 Uu~VLeLXjWFozRdIcQw)e57q{6CIA2c literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg new file mode 100644 index 0000000000000000000000000000000000000000..33bd84f8dd04f992f010a02605fa58f0d7bfef84 GIT binary patch literal 14882 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 literal 0 HcmV?d00001 From e26a644df06fbc97d57d11ac209e72ee2e984fbb Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 4 Jan 2021 17:02:36 +0100 Subject: [PATCH 08/11] Fix ender chest migration --- mods/ITEMS/mcl_chests/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index ecd21cba0..6932be9e4 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -1015,9 +1015,9 @@ minetest.register_node("mcl_chests:ender_chest_small", { }) minetest.register_lbm({ - label = "Update ender chest + shulker box formspecs (0.51.0)", + label = "Update shulker box formspecs (0.51.0)", name = "mcl_chests:update_formspecs_0_51_0", - nodenames = { "mcl_chests:ender_chest", "group:shulker_box" }, + nodenames = { "group:shulker_box" }, action = function(pos, node) minetest.registered_nodes[node.name].on_construct(pos) minetest.log("action", "[mcl_chests] Node formspec updated at "..minetest.pos_to_string(pos)) From de810cee81b29de3ac65ecccc0c669f6ecea02fb Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 4 Jan 2021 17:10:07 +0100 Subject: [PATCH 09/11] Fix chest migration in general --- mods/ITEMS/mcl_chests/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index 6932be9e4..bb0206cc4 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -1269,7 +1269,7 @@ local function select_and_spawn_entity(pos, node) local node_name = node.name local node_def = minetest.registered_nodes[node_name] local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 - create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh) + find_or_create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh) end minetest.register_lbm({ @@ -1284,7 +1284,7 @@ minetest.register_lbm({ label = "Replace old chest nodes", name = "mcl_chests:replace_old", nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on", "mcl_chests:ender_chest"}, - run_at_every_load = false, + run_at_every_load = true, action = function(pos, node) local node_name = node.name node.name = node_name .. "_small" From 17ff0c9be5b16c99aa26f8c9b8207a5c74edb609 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 4 Jan 2021 17:14:51 +0100 Subject: [PATCH 10/11] No static_save for chest entities --- mods/ITEMS/mcl_chests/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index bb0206cc4..ebe7a0611 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -28,6 +28,7 @@ minetest.register_entity("mcl_chests:chest", { visual_size = {x = 3, y = 3}, pointable = false, physical = false, + static_save = false, }, set_animation = function(self, animname) From 378dca593e9d60f9a30af8d198a4b0ed7c75163b Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 4 Jan 2021 17:16:48 +0100 Subject: [PATCH 11/11] Always create chest entities --- mods/ITEMS/mcl_chests/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index ebe7a0611..e7609bef1 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -1270,7 +1270,7 @@ local function select_and_spawn_entity(pos, node) local node_name = node.name local node_def = minetest.registered_nodes[node_name] local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 - find_or_create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh) + create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh) end minetest.register_lbm({