diff --git a/init.lua b/init.lua index 0a9d33d..e50b7b6 100644 --- a/init.lua +++ b/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") diff --git a/spec_bomb.lua b/tools.lua similarity index 73% rename from spec_bomb.lua rename to tools.lua index da6dba9..cca88da 100644 --- a/spec_bomb.lua +++ b/tools.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