added more powerful sand tubes (MESE sand tubes), along with associated crafts, textures, and documentation

This commit is contained in:
hdastwb 2013-07-08 12:06:47 -04:00
parent b19b57ef4b
commit 31680fcf80
11 changed files with 89 additions and 1 deletions

View File

@ -188,10 +188,18 @@ a {
<p>Here's how you craft it:</p> <p>Here's how you craft it:</p>
<img src="img/CraftNodeBreaker.png"> <img src="img/CraftNodeBreaker.png">
<h3>Sand Tubes</h3> <h3>Sand Tubes</h3>
<p>Sand tubes are special tubes that vacuum up free items around it. When an item drops near the sand tube, it is sucked up and sent along the tube.</p> <p>Sand tubes are special tubes that vacuum up free items around them. When an item drops near the sand tube, it is sucked up and sent along the tube.</p>
<p>Sand tubes have an effective radius of 2 meters (nodes). Outside of this sphere, items are unaffected.</p> <p>Sand tubes have an effective radius of 2 meters (nodes). Outside of this sphere, items are unaffected.</p>
<img src="img/SandTube.png"> <img src="img/SandTube.png">
<p>Here's how you craft it:</p> <p>Here's how you craft it:</p>
<img src="img/CraftSandTube.png"> <img src="img/CraftSandTube.png">
<h3>Mese Sand Tubes</h3>
<p>Mese sand tubes pick up items like sand tubes, but they do so in a customizable cubic region rather than a fixed spherical one.</p>
<p>To change the range of a mese sand tube, change the distance specified in the form.</p>
<p>The number entered here can be anywhere from 0 (the default) to 8; it represents a sort of cubic radius from the tube, thus the default is to only pick up items within the tube's 1x1x1 node, but, if one entered "5", the tube would pick up items in an 11x11x11 cube.</p>
<img src="img/MeseSandTubeForm.png" style="width:50%;">
<p>Crafts are similar to the mese sorting tube, but based on sand tubes instead:</p>
<img src="img/CraftMeseSandTube1.png">
<img src="img/CraftMeseSandTube2.png">
</body> </body>
</html> </html>

View File

@ -251,5 +251,26 @@ if io.open(minetest.get_modpath("pipeworks").."/../technic/init.lua", "r") == ni
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
}, },
}) })
minetest.register_craft( {
output = "pipeworks:mese_sand_tube_000000 2",
recipe = {
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
{ "default:sand", "default:mese_crystal", "default:sand" },
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
},
})
minetest.register_craft( {
type = "shapeless",
output = "pipeworks:mese_sand_tube_000000",
recipe = {
"pipeworks:sand_tube_000000",
"default:mese_crystal_fragment",
"default:mese_crystal_fragment",
"default:mese_crystal_fragment",
"default:mese_crystal_fragment"
},
})
end end

BIN
img/CraftMeseSandTube1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
img/CraftMeseSandTube2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
img/MeseSandTubeForm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

View File

@ -518,3 +518,62 @@ minetest.register_abm({nodenames={"group:sand_tube"},interval=1,chance=1,
end end
}) })
mese_sand_noctr_textures={"pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png",
"pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png"}
mese_sand_plain_textures={"pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png",
"pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png"}
mese_sand_end_textures={"pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png",
"pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png"}
mese_sand_short_texture="pipeworks_mese_sand_tube_short.png"
mese_sand_inv_texture="pipeworks_mese_sand_tube_inv.png"
register_tube("pipeworks:mese_sand_tube","Mese sand pneumatic tube segment",mese_sand_plain_textures,mese_sand_noctr_textures,mese_sand_end_textures,
mese_sand_short_texture,mese_sand_inv_texture,
{groups={mese_sand_tube=1},
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
meta:set_int("dist", 0)
meta:set_string("formspec",
"size[2,1]"..
"field[.5,.5;1.5,1;dist;distance;${dist}]")
meta:set_string("infotext", "Mese sand pneumatic tube")
end,
on_receive_fields=function(pos,formname,fields,sender)
local meta=minetest.env:get_meta(pos)
local dist
_, dist = pcall(tonumber, fields.dist)
if dist and 0 <= dist and dist <= 8 then meta:set_int("dist", dist) end
end,
})
local function get_objects_with_square_radius(pos, rad)
rad = rad + .5;
local objs = {}
for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, math.sqrt(3)*rad)) do
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
local opos = object:getpos()
if pos.x - rad <= opos.x and opos.x <= pos.x + rad and pos.y - rad <= opos.y and opos.y <= pos.y + rad and pos.z - rad <= opos.z and opos.z <= pos.z + rad then
objs[#objs + 1] = object
end
end
end
return objs
end
minetest.register_abm({nodenames={"group:mese_sand_tube"},interval=1,chance=1,
action=function(pos, node, active_object_count, active_object_count_wider)
for _,object in ipairs(get_objects_with_square_radius(pos, minetest.env:get_meta(pos):get_int("dist"))) do
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
if object:get_luaentity().itemstring ~= "" then
local titem=tube_item(pos,object:get_luaentity().itemstring)
titem:get_luaentity().start_pos = {x=pos.x,y=pos.y-1,z=pos.z}
titem:setvelocity({x=0.01,y=1,z=-0.01})
titem:setacceleration({x=0, y=0, z=0})
end
object:get_luaentity().itemstring = ""
object:remove()
end
end
end
})