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)
|
inv:set_size("main", 8 * 4)
|
||||||
end,
|
end,
|
||||||
-- Unlike other inventory nodes in this game, chests are NOT subject to protection.
|
on_destruct = function(pos)
|
||||||
-- This is done to allow something like "public chests" in protected areas.
|
item_drop.drop_items_from_container(pos, {"main"})
|
||||||
-- 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")
|
|
||||||
end,
|
end,
|
||||||
write_name = function(pos, text)
|
write_name = function(pos, text)
|
||||||
--[[ TODO: Bring back container naming
|
--[[ TODO: Bring back container naming
|
||||||
@ -95,10 +90,8 @@ minetest.register_node(
|
|||||||
allow_metadata_inventory_move = protection_check_move,
|
allow_metadata_inventory_move = protection_check_move,
|
||||||
allow_metadata_inventory_put = protection_check_put_take,
|
allow_metadata_inventory_put = protection_check_put_take,
|
||||||
allow_metadata_inventory_take = protection_check_put_take,
|
allow_metadata_inventory_take = protection_check_put_take,
|
||||||
can_dig = function(pos,player)
|
on_destruct = function(pos)
|
||||||
local meta = minetest.get_meta(pos);
|
item_drop.drop_items_from_container(pos, {"main"})
|
||||||
local inv = meta:get_inventory()
|
|
||||||
return inv:is_empty("main")
|
|
||||||
end,
|
end,
|
||||||
write_name = function(pos, text)
|
write_name = function(pos, text)
|
||||||
--[[ TODO: Bring back container naming
|
--[[ 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)
|
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)
|
local check_put = function(pos, listname, index, stack, player)
|
||||||
if minetest.is_protected(pos, player:get_player_name()) and
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
not minetest.check_player_privs(player, "protection_bypass") then
|
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_move = check_move,
|
||||||
allow_metadata_inventory_put = check_put,
|
allow_metadata_inventory_put = check_put,
|
||||||
allow_metadata_inventory_take = check_take,
|
allow_metadata_inventory_take = check_take,
|
||||||
can_dig = function(pos,player)
|
after_dig_node = after_dig_node,
|
||||||
local meta = minetest.get_meta(pos);
|
on_blast = on_blast,
|
||||||
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,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(
|
minetest.register_node(
|
||||||
@ -163,18 +162,8 @@ minetest.register_node(
|
|||||||
allow_metadata_inventory_move = check_move,
|
allow_metadata_inventory_move = check_move,
|
||||||
allow_metadata_inventory_put = check_put,
|
allow_metadata_inventory_put = check_put,
|
||||||
allow_metadata_inventory_take = check_take,
|
allow_metadata_inventory_take = check_take,
|
||||||
can_dig = function(pos,player)
|
after_dig_node = after_dig_node,
|
||||||
local meta = minetest.get_meta(pos);
|
on_blast = on_blast,
|
||||||
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,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
local function swap_node(pos, name)
|
local function swap_node(pos, name)
|
||||||
|
@ -35,6 +35,38 @@ function item_drop.drop_item(pos, itemstack)
|
|||||||
end
|
end
|
||||||
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
|
-- Overwrite Minetest's item_drop function
|
||||||
minetest.item_drop = function(itemstack, dropper, pos)
|
minetest.item_drop = function(itemstack, dropper, pos)
|
||||||
local dropper_is_player = dropper and dropper:is_player()
|
local dropper_is_player = dropper and dropper:is_player()
|
||||||
|
@ -305,11 +305,8 @@ minetest.register_node(
|
|||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("main", 1)
|
inv:set_size("main", 1)
|
||||||
end,
|
end,
|
||||||
can_dig = function(pos, player)
|
on_destruct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
item_drop.drop_items_from_container(pos, {"main"})
|
||||||
local inv = meta:get_inventory()
|
|
||||||
|
|
||||||
return inv:is_empty("main")
|
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_move = check_move,
|
allow_metadata_inventory_move = check_move,
|
||||||
allow_metadata_inventory_put = check_put,
|
allow_metadata_inventory_put = check_put,
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
name = rp_jewels
|
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
|
optional_depends = tt
|
||||||
|
Loading…
x
Reference in New Issue
Block a user