Fix error when removing doors with a chainsaw.

This commit is contained in:
Duane 2016-07-30 19:05:43 -05:00
parent 7b6de7195c
commit 9c121b4c09
2 changed files with 86 additions and 57 deletions

View file

@ -204,11 +204,7 @@ dofile(fun_caves.path .. "/fungal_tree.lua")
dofile(fun_caves.path .. "/wallhammer.lua") dofile(fun_caves.path .. "/wallhammer.lua")
dofile(fun_caves.path .. "/mapgen.lua") dofile(fun_caves.path .. "/mapgen.lua")
dofile(fun_caves.path .. "/wooden_buckets.lua") dofile(fun_caves.path .. "/wooden_buckets.lua")
dofile(fun_caves.path .. "/tools.lua")
if minetest.get_modpath('tnt') then
dofile(fun_caves.path .. "/spec_bomb.lua")
end
dofile(fun_caves.path .. "/elixir.lua") -- must go after all items are registered dofile(fun_caves.path .. "/elixir.lua") -- must go after all items are registered
dofile(fun_caves.path .. "/chat.lua") dofile(fun_caves.path .. "/chat.lua")

View file

@ -25,72 +25,74 @@ local function floor(pos, blocks, node_name, user_name)
end end
-- Floor bombs if minetest.get_modpath('tnt') then
local nodes = {{'default:sandstone', 'default:sandstone_block'}, {'default:wood', 'fun_caves:wood_block'}, {'default:stone', 'default:stone_block'},} -- Floor bombs
for _, node in pairs(nodes) do local nodes = {{'default:sandstone', 'default:sandstone_block'}, {'default:wood', 'fun_caves:wood_block'}, {'default:stone', 'default:stone_block'},}
local node_name = node[1] for _, node in pairs(nodes) do
local comp = node[2] or node_name local node_name = node[1]
if not minetest.registered_items[node_name] or (not minetest.registered_items[comp] and not comp:find('^fun_caves')) then local comp = node[2] or node_name
break if not minetest.registered_items[node_name] or (not minetest.registered_items[comp] and not comp:find('^fun_caves')) then
end break
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
end end
local wield = puncher:get_wielded_item() local node_texture = minetest.registered_items[node_name].tiles
if not wield or wield:get_name() ~= "default:torch" then if type(node_texture) == 'table' then
return node_texture = node_texture[1]
end 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 newnode = fun_caves.clone_node(node_name)
local pos_node = minetest.get_node_or_nil(pos) newnode.description = d_name_u.." Floor Bomb"
if not (pos_node and pos_node.name == bomb_name) then 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 return
end end
floor(pos, 100, node_name, puncher:get_player_name()) local wield = puncher:get_wielded_item()
minetest.set_node(pos, {name = node_name}) if not wield or wield:get_name() ~= "default:torch" then
end) return
end end
minetest.register_node(bomb_name, newnode)
if not minetest.registered_items[comp] then minetest.after(5, function()
newnode = fun_caves.clone_node(node_name) local pos_node = minetest.get_node_or_nil(pos)
newnode.description = newnode.description .. ' Block' if not (pos_node and pos_node.name == bomb_name) then
minetest.register_node(comp, newnode) 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({ minetest.register_craft({
output = comp, output = "fun_caves:"..d_name..'_floor_bomb',
recipe = { recipe = {
{node_name, node_name, node_name}, {comp, comp, comp},
{node_name, node_name, node_name}, {comp, "tnt:gunpowder", comp},
{node_name, node_name, node_name} {comp, comp, comp}
} }
}) })
end end
minetest.register_craft({
output = "fun_caves:"..d_name..'_floor_bomb',
recipe = {
{comp, comp, comp},
{comp, "tnt:gunpowder", comp},
{comp, comp, comp}
}
})
end end
local function power(player, pos, tool_type, max) 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]], 'snappy') or 0
diggable[data[ivm]] = diggable[data[ivm]] + minetest.get_item_group(names[data[ivm]], 'fleshy') or 0 diggable[data[ivm]] = diggable[data[ivm]] + minetest.get_item_group(names[data[ivm]], 'fleshy') or 0
end end
if names[data[ivm]] and names[data[ivm]]:find('^door') then
diggable[data[ivm]] = 0
end
end end
if count < max_nodes and diggable[data[ivm]] > 0 and not minetest.is_protected(p, player_name) then 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', ''}, {'', '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