Fix error when removing doors with a chainsaw.
This commit is contained in:
parent
7b6de7195c
commit
9c121b4c09
2 changed files with 86 additions and 57 deletions
6
init.lua
6
init.lua
|
@ -204,11 +204,7 @@ dofile(fun_caves.path .. "/fungal_tree.lua")
|
|||
dofile(fun_caves.path .. "/wallhammer.lua")
|
||||
dofile(fun_caves.path .. "/mapgen.lua")
|
||||
dofile(fun_caves.path .. "/wooden_buckets.lua")
|
||||
|
||||
if minetest.get_modpath('tnt') then
|
||||
dofile(fun_caves.path .. "/spec_bomb.lua")
|
||||
end
|
||||
|
||||
dofile(fun_caves.path .. "/tools.lua")
|
||||
dofile(fun_caves.path .. "/elixir.lua") -- must go after all items are registered
|
||||
dofile(fun_caves.path .. "/chat.lua")
|
||||
|
||||
|
|
|
@ -25,72 +25,74 @@ local function floor(pos, blocks, node_name, user_name)
|
|||
end
|
||||
|
||||
|
||||
-- Floor bombs
|
||||
local nodes = {{'default:sandstone', 'default:sandstone_block'}, {'default:wood', 'fun_caves:wood_block'}, {'default:stone', 'default:stone_block'},}
|
||||
for _, node in pairs(nodes) do
|
||||
local node_name = node[1]
|
||||
local comp = node[2] or node_name
|
||||
if not minetest.registered_items[node_name] or (not minetest.registered_items[comp] and not comp:find('^fun_caves')) then
|
||||
break
|
||||
end
|
||||
|
||||
local node_texture = minetest.registered_items[node_name].tiles
|
||||
if type(node_texture) == 'table' then
|
||||
node_texture = node_texture[1]
|
||||
end
|
||||
local _, d_name = node_name:match('(.*:)(.*)')
|
||||
local bomb_name = "fun_caves:"..d_name..'_floor_bomb'
|
||||
local d_name_u = d_name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end)
|
||||
|
||||
local newnode = fun_caves.clone_node(node_name)
|
||||
newnode.description = d_name_u.." Floor Bomb"
|
||||
newnode.inventory_image = '[inventorycube{'..node_texture..'{'..node_texture..'{'..node_texture..'^fun_caves_expand.png'
|
||||
newnode.drop = bomb_name
|
||||
newnode.on_punch = function(pos, node, puncher, pointed_thing)
|
||||
if not (pos and puncher) then
|
||||
return
|
||||
if minetest.get_modpath('tnt') then
|
||||
-- Floor bombs
|
||||
local nodes = {{'default:sandstone', 'default:sandstone_block'}, {'default:wood', 'fun_caves:wood_block'}, {'default:stone', 'default:stone_block'},}
|
||||
for _, node in pairs(nodes) do
|
||||
local node_name = node[1]
|
||||
local comp = node[2] or node_name
|
||||
if not minetest.registered_items[node_name] or (not minetest.registered_items[comp] and not comp:find('^fun_caves')) then
|
||||
break
|
||||
end
|
||||
|
||||
local wield = puncher:get_wielded_item()
|
||||
if not wield or wield:get_name() ~= "default:torch" then
|
||||
return
|
||||
local node_texture = minetest.registered_items[node_name].tiles
|
||||
if type(node_texture) == 'table' then
|
||||
node_texture = node_texture[1]
|
||||
end
|
||||
local _, d_name = node_name:match('(.*:)(.*)')
|
||||
local bomb_name = "fun_caves:"..d_name..'_floor_bomb'
|
||||
local d_name_u = d_name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end)
|
||||
|
||||
minetest.after(5, function()
|
||||
local pos_node = minetest.get_node_or_nil(pos)
|
||||
if not (pos_node and pos_node.name == bomb_name) then
|
||||
local newnode = fun_caves.clone_node(node_name)
|
||||
newnode.description = d_name_u.." Floor Bomb"
|
||||
newnode.inventory_image = '[inventorycube{'..node_texture..'{'..node_texture..'{'..node_texture..'^fun_caves_expand.png'
|
||||
newnode.drop = bomb_name
|
||||
newnode.on_punch = function(pos, node, puncher, pointed_thing)
|
||||
if not (pos and puncher) then
|
||||
return
|
||||
end
|
||||
|
||||
floor(pos, 100, node_name, puncher:get_player_name())
|
||||
minetest.set_node(pos, {name = node_name})
|
||||
end)
|
||||
end
|
||||
minetest.register_node(bomb_name, newnode)
|
||||
local wield = puncher:get_wielded_item()
|
||||
if not wield or wield:get_name() ~= "default:torch" then
|
||||
return
|
||||
end
|
||||
|
||||
if not minetest.registered_items[comp] then
|
||||
newnode = fun_caves.clone_node(node_name)
|
||||
newnode.description = newnode.description .. ' Block'
|
||||
minetest.register_node(comp, newnode)
|
||||
minetest.after(5, function()
|
||||
local pos_node = minetest.get_node_or_nil(pos)
|
||||
if not (pos_node and pos_node.name == bomb_name) then
|
||||
return
|
||||
end
|
||||
|
||||
floor(pos, 100, node_name, puncher:get_player_name())
|
||||
minetest.set_node(pos, {name = node_name})
|
||||
end)
|
||||
end
|
||||
minetest.register_node(bomb_name, newnode)
|
||||
|
||||
if not minetest.registered_items[comp] then
|
||||
newnode = fun_caves.clone_node(node_name)
|
||||
newnode.description = newnode.description .. ' Block'
|
||||
minetest.register_node(comp, newnode)
|
||||
|
||||
minetest.register_craft({
|
||||
output = comp,
|
||||
recipe = {
|
||||
{node_name, node_name, node_name},
|
||||
{node_name, node_name, node_name},
|
||||
{node_name, node_name, node_name}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = comp,
|
||||
output = "fun_caves:"..d_name..'_floor_bomb',
|
||||
recipe = {
|
||||
{node_name, node_name, node_name},
|
||||
{node_name, node_name, node_name},
|
||||
{node_name, node_name, node_name}
|
||||
{comp, comp, comp},
|
||||
{comp, "tnt:gunpowder", comp},
|
||||
{comp, comp, comp}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "fun_caves:"..d_name..'_floor_bomb',
|
||||
recipe = {
|
||||
{comp, comp, comp},
|
||||
{comp, "tnt:gunpowder", comp},
|
||||
{comp, comp, comp}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
local function power(player, pos, tool_type, max)
|
||||
|
@ -171,6 +173,10 @@ local function power(player, pos, tool_type, max)
|
|||
diggable[data[ivm]] = diggable[data[ivm]] + minetest.get_item_group(names[data[ivm]], 'snappy') or 0
|
||||
diggable[data[ivm]] = diggable[data[ivm]] + minetest.get_item_group(names[data[ivm]], 'fleshy') or 0
|
||||
end
|
||||
|
||||
if names[data[ivm]] and names[data[ivm]]:find('^door') then
|
||||
diggable[data[ivm]] = 0
|
||||
end
|
||||
end
|
||||
|
||||
if count < max_nodes and diggable[data[ivm]] > 0 and not minetest.is_protected(p, player_name) then
|
||||
|
@ -392,3 +398,30 @@ minetest.register_craft({
|
|||
{'', 'tnt:gunpowder', ''},
|
||||
}
|
||||
})
|
||||
|
||||
if false then
|
||||
minetest.register_tool("fun_caves:destroyer", {
|
||||
description = "Destroyer",
|
||||
inventory_image = "default_torch_on_floor.png",
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 1.0,
|
||||
max_drop_level=1,
|
||||
groupcaps={
|
||||
choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=80, maxlevel=2},
|
||||
},
|
||||
damage_groups = {fleshy=4},
|
||||
},
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if not (user and pointed_thing and pointed_thing.above) then
|
||||
return
|
||||
end
|
||||
local node = minetest.get_node_or_nil(pointed_thing.above)
|
||||
if not node then
|
||||
return
|
||||
end
|
||||
|
||||
print(dump(node))
|
||||
minetest.remove_node(pointed_thing.above)
|
||||
end,
|
||||
})
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue