Containers drop stuff when mined
This commit is contained in:
parent
b4df17d664
commit
390e03898a
@ -42,13 +42,8 @@ minetest.register_node(
|
||||
|
||||
inv:set_size("main", 8 * 4)
|
||||
end,
|
||||
-- Unlike other inventory nodes in this game, chests are NOT subject to protection.
|
||||
-- This is done to allow something like "public chests" in protected areas.
|
||||
-- To protect their belongings, players are supposed locked chests instead.
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main")
|
||||
on_destruct = function(pos)
|
||||
item_drop.drop_items_from_container(pos, {"main"})
|
||||
end,
|
||||
write_name = function(pos, text)
|
||||
--[[ TODO: Bring back container naming
|
||||
@ -95,10 +90,8 @@ minetest.register_node(
|
||||
allow_metadata_inventory_move = protection_check_move,
|
||||
allow_metadata_inventory_put = protection_check_put_take,
|
||||
allow_metadata_inventory_take = protection_check_put_take,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main")
|
||||
on_destruct = function(pos)
|
||||
item_drop.drop_items_from_container(pos, {"main"})
|
||||
end,
|
||||
write_name = function(pos, text)
|
||||
--[[ TODO: Bring back container naming
|
||||
|
@ -61,6 +61,15 @@ form_furnace = form_furnace .. "image[3.25,1.75;1,1;ui_arrow_bg.png^[transformR2
|
||||
|
||||
rp_formspec.register_page("rp_default:furnace_inactive", form_furnace)
|
||||
|
||||
local after_dig_node = function(pos, nodenode, oldmetadata, digger)
|
||||
item_drop.drop_items_from_container_meta_table(pos, {"fuel", "src", "dst"}, oldmetadata)
|
||||
end
|
||||
|
||||
local on_blast = function(pos)
|
||||
item_drop.drop_items_from_container(pos, {"fuel", "src", "dst"})
|
||||
minetest.remove_node(pos)
|
||||
end
|
||||
|
||||
local check_put = function(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) and
|
||||
not minetest.check_player_privs(player, "protection_bypass") then
|
||||
@ -123,18 +132,8 @@ minetest.register_node(
|
||||
allow_metadata_inventory_move = check_move,
|
||||
allow_metadata_inventory_put = check_put,
|
||||
allow_metadata_inventory_take = check_take,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("fuel") then
|
||||
return false
|
||||
elseif not inv:is_empty("dst") then
|
||||
return false
|
||||
elseif not inv:is_empty("src") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
after_dig_node = after_dig_node,
|
||||
on_blast = on_blast,
|
||||
})
|
||||
|
||||
minetest.register_node(
|
||||
@ -163,18 +162,8 @@ minetest.register_node(
|
||||
allow_metadata_inventory_move = check_move,
|
||||
allow_metadata_inventory_put = check_put,
|
||||
allow_metadata_inventory_take = check_take,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("fuel") then
|
||||
return false
|
||||
elseif not inv:is_empty("dst") then
|
||||
return false
|
||||
elseif not inv:is_empty("src") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
after_dig_node = after_dig_node,
|
||||
on_blast = on_blast,
|
||||
})
|
||||
|
||||
local function swap_node(pos, name)
|
||||
|
@ -35,6 +35,38 @@ function item_drop.drop_item(pos, itemstack)
|
||||
end
|
||||
end
|
||||
|
||||
function item_drop.drop_items_from_container(pos, invlists)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
for l=1, #invlists do
|
||||
local list = invlists[l]
|
||||
for i=1, inv:get_size(list) do
|
||||
local item = inv:get_stack(list, i)
|
||||
if not item:is_empty() then
|
||||
item_drop.drop_item(pos, item)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function item_drop.drop_items_from_container_meta_table(pos, invlists, meta_table)
|
||||
if not meta_table or not meta_table.inventory then
|
||||
return
|
||||
end
|
||||
for l=1, #invlists do
|
||||
local list = invlists[l]
|
||||
local list_table = meta_table.inventory[list]
|
||||
if list_table then
|
||||
for i=1, #list_table do
|
||||
local item = ItemStack(list_table[i])
|
||||
if not item:is_empty() then
|
||||
item_drop.drop_item(pos, item)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Overwrite Minetest's item_drop function
|
||||
minetest.item_drop = function(itemstack, dropper, pos)
|
||||
local dropper_is_player = dropper and dropper:is_player()
|
||||
|
@ -305,11 +305,8 @@ minetest.register_node(
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 1)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
return inv:is_empty("main")
|
||||
on_destruct = function(pos)
|
||||
item_drop.drop_items_from_container(pos, {"main"})
|
||||
end,
|
||||
allow_metadata_inventory_move = check_move,
|
||||
allow_metadata_inventory_put = check_put,
|
||||
|
@ -1,3 +1,3 @@
|
||||
name = rp_jewels
|
||||
depends = rp_sounds, rp_default, rp_formspec, rp_crafting, rp_achievements
|
||||
depends = rp_sounds, rp_default, rp_formspec, rp_crafting, rp_achievements, rp_item_drop
|
||||
optional_depends = tt
|
||||
|
Loading…
x
Reference in New Issue
Block a user