-- State Changes local update_bobtrap = function (pos, node) local nodename="" local param2="" --Switch Trap State if -- Swap Traps node.name == 'bobblocks:trap_spike' then nodename = 'bobblocks:trap_spike_set' elseif node.name == 'bobblocks:trap_spike_set' then nodename = 'bobblocks:trap_spike' elseif node.name == 'bobblocks:trap_spike_major' then nodename = 'bobblocks:trap_spike_major_set' elseif node.name == 'bobblocks:trap_spike_major_set' then nodename = 'bobblocks:trap_spike_major' end minetest.add_node(pos, {name = nodename}) end -- Punch Traps local on_bobtrap_punched = function (pos, node, puncher) if -- Start Traps node.name == 'bobblocks:trap_spike' or node.name == 'bobblocks:trap_spike_set' or node.name == 'bobblocks:trap_spike_major' or node.name == 'bobblocks:trap_spike_major_set' then update_bobtrap(pos, node) end end minetest.register_on_punchnode(on_bobtrap_punched) --ABM (Spring The Traps) minetest.register_abm( {nodenames = {"bobblocks:trap_spike_set"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local objs = minetest.get_objects_inside_radius(pos, 1) for k, obj in pairs(objs) do update_bobtrap(pos, node) end end, }) minetest.register_abm( {nodenames = {"bobblocks:trap_spike_major_set"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local objs = minetest.get_objects_inside_radius(pos, 1) for k, obj in pairs(objs) do update_bobtrap(pos, node) end end, }) -- Nodes minetest.register_node("bobblocks:trap_grass", { description = "Trap Grass", tiles = {"default_grass.png"}, paramtype2 = "facedir", legacy_facedir_simple = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, is_ground_content = false, walkable = false, climbable = false, }) local function spikenode(name, desc, texture, drop, groups, drawtype) minetest.register_node("bobblocks:trap_"..name, { description = desc, drawtype = drawtype, tiles = {"bobblocks_"..texture..".png"}, inventory_image = ("bobblocks_"..texture..".png"), paramtype = "light", walkable = false, sunlight_propagates = true, groups = groups, drop = drop, }) end local function spike1(name, desc, texture) spikenode(name, desc, texture, "bobblocks:trap_"..name, {cracky=3,melty=3}, "plantlike") end local function spike2(name, desc, texture, drop) spikenode(name, desc, texture, drop, {cracky=3,melty=3,not_in_creative_inventory=1}, "raillike") end spike1("spike", "Trap Spike Minor", "minorspike") spike2("spike_set", "Trap Spike Minor Set", "trap_set", 'bobblocks:trap_spike') spike1("spike_major", "Trap Spike Major", "majorspike") spike2("spike_major_set", "Trap Spike Major Set", "trap_set", 'bobblocks:trap_spike_major') minetest.register_node("bobblocks:spike_major_reverse", { description = "Trap Spike Major Reverse", drawtype = "plantlike", visual_scale = 1, tiles = {"bobblocks_majorspike_reverse.png"}, inventory_image = ("bobblocks_majorspike_reverse.png"), paramtype = "light", walkable = false, sunlight_propagates = true, groups = {cracky=2,melty=2}, }) -- Crafting minetest.register_craft({ output = 'bobblocks:trap_spike 3', recipe = { {'', 'default:obsidian_shard', ''}, {'', 'default:steel_ingot', ''}, } }) minetest.register_craft({ output = 'bobblocks:trap_spike_major', recipe = { {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, {'', 'default:steel_ingot', ''}, } }) minetest.register_craft({ output = 'bobblocks:trap_grass', recipe = { {'', '', ''}, {'', 'default:dirt', ''}, {'', 'default:stick', ''}, } }) minetest.register_craft({ output = 'bobblocks:spike_major_reverse', recipe = { {'', 'default:steel_ingot', ''}, {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, } }) -- ABM minetest.register_abm( {nodenames = {"bobblocks:trap_spike"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local objs = minetest.get_objects_inside_radius(pos, 1) for k, obj in pairs(objs) do if obj:get_hp() > 0 then --MFF (crabman 8/1/2016) dont re-kill dead player obj:set_hp(obj:get_hp()-1) end minetest.sound_play("bobblocks_trap_fall", {pos = pos, gain = 1.0, max_hear_distance = 3,}) end end, }) minetest.register_abm( {nodenames = {"bobblocks:trap_spike_major"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local objs = minetest.get_objects_inside_radius(pos, 1) for k, obj in pairs(objs) do if obj:get_hp() > 0 then --MFF (crabman 8/1/2016) dont re-kill dead player obj:set_hp(obj:get_hp()-100) end minetest.sound_play("bobblocks_trap_fall", {pos = pos, gain = 1.0, max_hear_distance = 3,}) end end, }) minetest.register_abm( {nodenames = {"bobblocks:spike_major_reverse"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) pos.y = pos.y-1.2 local objs = minetest.get_objects_inside_radius(pos, 1) for k, obj in pairs(objs) do if obj:get_hp() > 0 then --MFF (crabman 8/1/2016) dont re-kill dead player obj:set_hp(obj:get_hp()-100) end minetest.sound_play("bobblocks_trap_fall", {pos = pos, gain = 1.0, max_hear_distance = 3,}) end end, })