nuke/api.lua
2014-07-11 18:30:56 -04:00

86 lines
1.9 KiB
Lua

-- Create some tables first so that they're only created once
local mesecon_def = {effector = {
rules = {
{x=0, y=1, z=-1},
{x=0, y=0, z=-1},
{x=0, y=-1, z=-1},
{x=0, y=1, z=1},
{x=0, y=-1, z=1},
{x=0, y=0, z=1},
{x=1, y=0, z=0},
{x=1, y=1, z=0},
{x=1, y=-1, z=0},
{x=-1, y=1, z=0},
{x=-1, y=-1, z=0},
{x=-1, y=0, z=0},
{x=0, y=-1, z=0},
{x=0, y=1, z=0},
{x=0, y=2, z=0},
},
action_on = function(pos, node)
if nuke:can_detonate() then
nuke:ignite(pos, node.name)
end
end,
}}
local node_groups = {dig_immediate = 3, mesecon = 2, falling_node=1}
local entity_groups = {punch_operable = 1}
local sounds = default.node_sound_stone_defaults()
local collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
local function on_punch(pos, node, player)
local stack = player:get_wielded_item()
local player_name = player:get_player_name()
if stack:get_name() == "default:torch" and
nuke:can_detonate(player_name) then
nuke:ignite(pos, node.name)
end
end
function nuke:register_nuke(name, description, radius, tiles)
minetest.register_node(name, {
tiles = tiles,
description = description,
sounds = sounds,
groups = node_groups,
on_punch = on_punch,
mesecons = mesecon_def,
})
local e = self.entity
minetest.register_entity(name, {
textures = tiles,
radius = radius,
physical = true,
collisionbox = collisionbox,
visual = "cube",
groups = entity_groups,
health = 10,
timer = 1,
blinktimer = 0,
blinkstatus = true,
on_activate = e.on_activate,
on_step = e.on_step,
on_punch = e.on_punch,
get_staticdata = e.get_staticdata,
smoke_spawner = false,
})
self.cid_names[minetest.get_content_id(name)] = name
if nuke:can_detonate() then
minetest.register_abm({
nodenames = {name},
neighbors = {"group:igniter"},
interval = 1,
chance = 1,
action = function(pos, node)
self:ignite(pos, node.name)
end
})
end
end