use voxelmanip

master
Martin Doege 2015-04-09 17:56:56 +02:00
parent eec2073f07
commit a219c56c0c
6 changed files with 81 additions and 142 deletions

View File

@ -1,142 +0,0 @@
local mysponge_table = { -- item, ,desc, image, scale, nodegroup, bright
{"sponge_dry", "Dry Sponge", "sponge.png", "0.5", {dig_immediate=1, oddly_breakable_by_hand=1, flammable=1}},
{"sponge_soaked","Wet Sponge", "sponge_wet.png", "1", {dig_immediate=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}},
}
for i in ipairs(mysponge_table) do
local item = mysponge_table[i][1]
local desc = mysponge_table[i][2]
local image = mysponge_table[i][3]
local scale = mysponge_table[i][4]
local nodegroup = mysponge_table[i][5]
minetest.register_node("mysponge:"..item,{
description = desc,
tiles = {image},
paramtype = "light",
groups = {crumbly=3, level=0, dig_immediate=1}
})
end
local air_nodes = {
{"air1"},
{"air2"},
{"air3"},
}
for i in ipairs(air_nodes) do
local airnode = air_nodes[i][1]
minetest.register_node("mysponge:"..airnode,{
-- description = "Air 1",
tiles = {"mysponge_air.png"},
drawtype = "allfaces",
walkable = false,
pointable = false,
paramtype = "light",
groups = {not_in_creative_inventory=1}
})
end
minetest.register_node("mysponge:dry_leaves",{
description = "Dry Leaves",
tiles = {"mysponge_dry_leaves.png"},
drawtype = "allfaces_optional",
paramtype = "light",
groups = {dig_immediate=1, oddly_breakable_by_hand=1}
})
-------------------------------------------------------------------------
--ABMs
-------------------------------------------------------------------------
--Set Air
--Air 1
minetest.register_abm({
nodenames = {"group:water"},
neighbors = {"mysponge:sponge_dry"},
interval = 0.5,
chance = 1,
action = function(pos)
minetest.set_node(pos, {name="mysponge:air1"})
end
})
--Air 2
minetest.register_abm({
nodenames = {"group:water"},
neighbors = {"mysponge:air1"},
interval = 0.5,
chance = 1,
action = function(pos)
minetest.set_node(pos, {name="mysponge:air2"})
end
})
--Air 3
minetest.register_abm({
nodenames = {"group:water"},
neighbors = {"mysponge:air2"},
interval = 0.5,
chance = 1,
action = function(pos)
minetest.set_node(pos, {name="mysponge:air3"})
end
})
-------------------------------------------------------------------------
--Set default Air
-------------------------------------------------------------------------
minetest.register_abm({
nodenames = {"mysponge:air1","mysponge:air2","mysponge:air3"},
interval = 6,
chance = 1,
action = function(pos)
minetest.set_node(pos, {name="air"})
end
})
-------------------------------------------------------------------------
--Set Sponge
-------------------------------------------------------------------------
minetest.register_abm({
nodenames = {"mysponge:sponge_dry"},
neighbors = {"mysponge:air1"},
interval = 3,
chance = 1,
action = function(pos)
minetest.set_node(pos, {name="mysponge:sponge_soaked"})
end
})
-------------------------------------------------------------------------------------------------
--Craft
minetest.register_craft({
type = "cooking",
output = "default:water_source 3",
recipe = "mysponge:sponge_soaked",
cooktime = 5,
replacements = {{"mysponge:sponge_soaked", "mysponge:sponge_dry"}},
})
minetest.register_craft({
type = "cooking",
output = "mysponge:dry_leaves",
recipe = "group:leaves",
cooktime = 3,
})
minetest.register_craft({
output = "mysponge:sponge_dry 1",
recipe = {
{"mysponge:dry_leaves","mysponge:dry_leaves"},
{"mysponge:dry_leaves","mysponge:dry_leaves"},
},
cooktime = 3,
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 B

81
mods/sponge/init.lua Normal file
View File

@ -0,0 +1,81 @@
minetest.register_node("sponge:sponge_wet",{
description = "Wet Sponge",
tiles = {"sponge_wet.png"},
paramtype = "light",
groups = {crumbly=3, level=0, dig_immediate=1, oddly_breakable_by_hand=1}
})
minetest.register_node("sponge:sponge_dry",{
description = "Dry Sponge",
tiles = {"sponge.png"},
paramtype = "light",
groups = {crumbly=3, level=0, dig_immediate=1, oddly_breakable_by_hand=1, flammable=1},
after_place_node = function(pos, placer, itemstack)
local vm = minetest.get_voxel_manip()
local p1 = {x=pos.x-17,y=pos.y-17,z=pos.z-17}
local p2 = {x=pos.x+17,y=pos.y+17,z=pos.z+17}
local emin, emax = vm:read_from_map(p1, p2)
local data = vm:get_data()
local area = VoxelArea:new{ MinEdge = emin, MaxEdge = emax }
local c_air = minetest.get_content_id("air")
local c_w = minetest.get_content_id("water_flowing")
local c_ws = minetest.get_content_id("water_source")
local c_sw = minetest.get_content_id("sponge:sponge_wet")
local iswet = false
for x=pos.x-7,pos.x+7,1 do
for z=pos.z-7,pos.z+7,1 do
for y=pos.y-7,pos.y+7,1 do
local p_pos = area:index(x, y, z)
if data[p_pos] == c_w or data[p_pos] == c_ws then
data[p_pos] = c_air
iswet = true
end
end
end
end
if iswet then
data[area:index(pos.x, pos.y, pos.z)] = c_sw
end
vm:set_data(data)
vm:calc_lighting()
vm:update_liquids()
vm:write_to_map()
vm:update_map()
return false
end,
})
minetest.register_node("sponge:dry_leaves",{
description = "Dry Leaves",
tiles = {"sponge_dry_leaves.png"},
drawtype = "allfaces_optional",
paramtype = "light",
groups = {dig_immediate=1, oddly_breakable_by_hand=1}
})
-------------------------------------------------------------------------------------------------
--Craft
minetest.register_craft({
type = "cooking",
output = "sponge:sponge_dry 1",
recipe = "sponge:sponge_wet",
cooktime = 5,
})
minetest.register_craft({
type = "cooking",
output = "sponge:dry_leaves",
recipe = "group:leaves",
cooktime = 3,
})
minetest.register_craft({
output = "sponge:sponge_dry 1",
recipe = {
{"sponge:dry_leaves","sponge:dry_leaves"},
{"sponge:dry_leaves","sponge:dry_leaves"},
},
cooktime = 3,
})

View File

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB