local function removeNode(pos)
local n = minetest.env:get_node(pos).name
if (n == "default:stone") then
local chance = math.random(200)
if (chance == 10) then
minetest.env:add_node(pos, {name="glowblocks:glowblockblue_on"})
else
minetest.env:add_node(pos, {name="air"})
end
end
end
local function removeCubicShell(pos, sideLen)
local s = math.floor(sideLen/2)
for dx = -s, s do
for dy = -s, s do
removeNode({ x = pos.x + dx, y = pos.y + dy, z = pos.z - s })
removeNode({ x = pos.x + dx, y = pos.y + dy, z = pos.z + s })
end
end
for dy = -s, s do
for dz = -s, s do
removeNode({ x = pos.x - s, y = pos.y + dy, z = pos.z + dz })
removeNode({ x = pos.x + s, y = pos.y + dy, z = pos.z + dz })
end
end
for dz = -s, s do
for dx = -s, s do
removeNode({ x = pos.x + dx, y = pos.y - s, z = pos.z + dz })
removeNode({ x = pos.x + dx, y = pos.y + s, z = pos.z + dz })
end
end
end
minetest.register_node("neoblocks:stoneremover", {
tile_images = {"test_block.png"},
groups={snappy=2,choppy=2,oddly_breakable_by_hand=2},
description = "Stone Remover",
light_source = 14,
on_construct = function(pos)
removeCubicShell(pos, 1)
removeCubicShell(pos, 2)
removeCubicShell(pos, 3)
removeCubicShell(pos, 4)
removeCubicShell(pos, 5)
removeCubicShell(pos, 6)
removeCubicShell(pos, 7)
removeCubicShell(pos, 8)
removeCubicShell(pos, 9)
removeCubicShell(pos, 10)
end,
})
minetest.register_craft({
output = '"neoblocks:testblock" 2',
recipe = {
{'', 'default:wood', ''},
{'', 'default:wood', ''},
{'default:stone', '', 'default:wood'},
}
})
--
--Lava--
--
local function removeNodeL(pos)
local n = minetest.env:get_node(pos).name
if (n == "default:lava_source") then
minetest.env:add_node(pos, {name="air"})
end
if (n == "default:lava_flowing") then
minetest.env:add_node(pos, {name="air"})
end
end
local function removeCubicShellL(pos, sideLen)
local s = math.floor(sideLen/2)
for dx = -s, s do
for dy = -s, s do
removeNodeL({ x = pos.x + dx, y = pos.y + dy, z = pos.z - s })
removeNodeL({ x = pos.x + dx, y = pos.y + dy, z = pos.z + s })
end
end
for dy = -s, s do
for dz = -s, s do
removeNodeL({ x = pos.x - s, y = pos.y + dy, z = pos.z + dz })
removeNodeL({ x = pos.x + s, y = pos.y + dy, z = pos.z + dz })
end
end
for dz = -s, s do
for dx = -s, s do
removeNodeL({ x = pos.x + dx, y = pos.y - s, z = pos.z + dz })
removeNodeL({ x = pos.x + dx, y = pos.y + s, z = pos.z + dz })
end
end
end
minetest.register_node("neoblocks:lavaremover", {
tile_images = {"test_block.png"},
groups={snappy=2,choppy=2,oddly_breakable_by_hand=2},
description = "Lava Remover",
light_source = 14,
on_construct = function(pos)
removeCubicShellL(pos, 1)
removeCubicShellL(pos, 2)
removeCubicShellL(pos, 3)
removeCubicShellL(pos, 4)
removeCubicShellL(pos, 5)
removeCubicShellL(pos, 6)
removeCubicShellL(pos, 7)
removeCubicShellL(pos, 8)
removeCubicShellL(pos, 9)
removeCubicShellL(pos, 10)
end,
})
--
--
-- Drill
--
--
local function digging(pos)
minetest.env:add_node(pos, {name="default:ladder", param2=2})
end
local function digDown(pos)
local iSet = 1
while (iSet <= 50) do
digging({ x = pos.x , y = pos.y - iSet, z = pos.z })
iSet = iSet + 1
end
end
minetest.register_node("neoblocks:digger", {
tile_images = {"test_block.png"},
groups={snappy=2,choppy=2,oddly_breakable_by_hand=2},
description = "Digger",
light_source = 14,
on_construct = function(pos)
digDown(pos)
end,
})
--
--
-- Probe
--
--
local function probing(pos, pSet)
local n = minetest.env:get_node(pos).name
if (n == "air") then
return pSet
else
return 9999
end
end
local function probeDown(pos)
local pSet = 1
while (pSet <= 50) do
if (probing({ x = pos.x , y = pos.y - pSet, z = pos.z }, pSet) ~= 9999) then
return probing({ x = pos.x , y = pos.y - pSet, z = pos.z }, pSet)
elseif (pSet == 50) then
return 9999
else
pSet = pSet + 1
end
end
end
minetest.register_node("neoblocks:probe", {
tile_images = {"test_block.png"},
groups={snappy=2,choppy=2,oddly_breakable_by_hand=2},
description = "Probe",
light_source = 14,
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
if (probeDown(pos) == 9999) then
meta:set_string("infotext", "Very Far")
elseif (probeDown(pos) <= 10) then
meta:set_string("infotext", "Close")
elseif (probeDown(pos) >= 10) then
meta:set_string("infotext", "Far")
end
})