From ce4e86549bf180826546a5bb28c83f1148a7eb57 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 4 Jan 2021 11:26:07 +0100 Subject: [PATCH] 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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 literal 0 HcmV?d00001