Add loads of stuff

master
minermoder27 2013-12-12 08:52:53 +13:00
parent ad2e925241
commit 941ff68e22
5 changed files with 283 additions and 10 deletions

View File

@ -0,0 +1,2 @@
mesecons
default

View File

@ -0,0 +1,120 @@
minetest.register_node("moremesecons_dispenser:placer", {
description = "Placer",
tiles = {"moremesecons_dispenser_placer_top.png", "moremesecons_dispenser_placer.png", "moremesecons_dispenser_placer.png",
"moremesecons_dispenser_placer.png", "moremesecons_dispenser_placer_front.png", "moremesecons_dispenser_placer.png"},
groups = {snappy = 2, oddly_breakable_by_hand = 3},
paramtype2 = "facedir",
mesecons = {effector = {
action_on = function (pos, node)
local dir = minetest.facedir_to_dir(node.param2)
local pos_under, pos_above = {x=pos.x + dir.x, y=pos.y + dir.y, z=pos.z + dir.z},
{x=pos.x + 2*dir.x, y=pos.y + 2*dir.y, z=pos.z + 2*dir.z}
nodeupdate(pos)
local inv = minetest.get_meta(pos):get_inventory()
local invlist = inv:get_list("main")
for i, stack in ipairs(invlist) do
if stack:get_name() ~= nil and stack:get_name() ~= "" and minetest.get_node(pos_under).name == "air" then --obtain the first non-empty item slot
local placer = {
get_player_name = function() return "deployer" end,
getpos = function() return pos end,
get_player_control = function() return {jump=false,right=false,left=false,LMB=false,RMB=false,sneak=false,aux1=false,down=false,up=false} end,
}
local stack2 = minetest.item_place(stack, placer, {type="node", under=pos_under, above=pos_above})
invlist[i] = stack2
inv:set_list("main", invlist)
return
end
end
end
}},
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "invsize[8,9;]"..
"list[context;main;0,0;8,4;]"..
"list[current_player;main;0,4;8,4;]")
local inv = meta:get_inventory()
inv:set_size("main", 4*8)
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
})
minetest.register_node("moremesecons_dispenser:dispenser", {
description = "dispenser",
tiles = {"moremesecons_dispenser_dispenser_top.png", "moremesecons_dispenser_dispenser.png", "moremesecons_dispenser_dispenser.png",
"moremesecons_dispenser_dispenser.png", "moremesecons_dispenser_dispenser_front.png", "moremesecons_dispenser_dispenser.png"},
groups = {snappy = 2, oddly_breakable_by_hand = 3},
paramtype2 = "facedir",
mesecons = {effector = {
action_on = function (pos, node)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
for i=1, inv:get_size("main") do
if not inv:get_stack("main", i):is_empty() then
local stack = inv:get_stack("main", i)
local dir = minetest.facedir_to_dir(node.param2)
local def = minetest.registered_items[stack:get_name()]
-----------------------------------------
local pos_under, pos_above = vector.add(pos, dir),
vector.add(pos, vector.add(dir, dir))
local placer = {
get_player_name = function() return "deployer" end,
getpos = function() return pos end,
get_player_control = function() return {jump=false,right=false,left=false,
LMB=false,RMB=false,sneak=false,aux1=false,down=false,up=false} end,
get_wield_index = function()
return i % 8
end,
get_inventory = function()
return inv
end,
get_look_dir = function()
return dir
end,
get_look_yaw = function()
return math.pi/2
end
}
-----------------------------------------
local orgstack = stack:to_string()
if def.on_place~=nil then
stack = def.on_place(stack, placer, {type="node", under=pos_under, above=pos_above})
end
if def.on_use~=nil and orgstack == stack:to_string() then
stack = def.on_use(stack, placer, {type="node", under=pos_under, above=pos_above})
print("on_use")
end
if orgstack == stack:to_string() then
local newpos = vector.add(dir, pos)
local newstack = stack:to_table()
newstack.count = 1
minetest.add_item(newpos, newstack)
stack:take_item()
end
inv:set_stack("main", i, stack)
return
end
end
end
}},
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "invsize[8,9;]"..
"list[context;main;0,0;8,4;]"..
"list[current_player;main;0,4;8,4;]")
local inv = meta:get_inventory()
inv:set_size("main", 4*8)
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
})

View File

@ -0,0 +1,2 @@
mesecons_pressureplates
default

View File

@ -0,0 +1,88 @@
-- made from mesecons_pressureplates
function mesecon:register_wire_block(type, stype)
local offstate = "moremesecons_mesecondecorblocks:block_"..stype.."_off"
local onstate = "moremesecons_mesecondecorblocks:block_"..stype.."_on"
local description = minetest.registered_nodes[type].description .. " Block Pressure Plate"
local textures = minetest.registered_nodes[type].tiles
local recipe = {{"default:mese", type}}
local ppspec = {
offstate = offstate,
onstate = onstate
}
local mesewire_rules =
{
{x = 1, y = 0, z = 0},
{x =-1, y = 0, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y =-1, z = 0},
{x = 0, y = 0, z = 1},
{x = 0, y = 0, z =-1},
}
minetest.register_node(offstate, {
tiles = textures,
groups = {snappy = 2, oddly_breakable_by_hand = 3},
description = description,
mesecons = {conductor = {
state = mesecon.state.off,
onstate = onstate,
rules = mesewire_rules
}}
})
local textures_on = {}
for i=1,#textures do
if textures[i]~=nil then
textures_on[i] = textures[i] .. "^[brighten"
end
end
minetest.register_node(onstate, {
tiles = textures_on,
groups = {snappy = 2, oddly_breakable_by_hand = 3, not_in_creative_inventory = 1},
drop = offstate,
mesecons = {conductor = {
state = mesecon.state.on,
offstate = offstate,
rules = mesewire_rules
}},
})
minetest.register_craft({
output = offstate,
recipe = recipe,
})
end
mesecon:register_wire_block(
"default:wood",
"wood")
mesecon:register_wire_block(
"default:tree",
"tree")
mesecon:register_wire_block(
"default:dirt",
"dirt")
mesecon:register_wire_block(
"default:dirt_with_grass",
"grass")
mesecon:register_wire_block(
"default:stone",
"stone")
mesecon:register_wire_block(
"default:cobble",
"cobble")

View File

@ -1,5 +1,47 @@
-- made from mesecons_pressureplates
local rules =
{
{x = 1, y = 0, z = 0},
{x =-1, y = 0, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y =-1, z = 0},
{x = 0, y = 0, z = 1},
{x = 0, y = 0, z =-1},
}
local bpp_on_timer = function (pos, elapsed)
local node = minetest.env:get_node(pos)
local ppspec = minetest.registered_nodes[node.name].pressureplate
-- This is a workaround for a strange bug that occurs when the server is started
-- For some reason the first time on_timer is called, the pos is wrong
if not ppspec then return end
local objs = minetest.env:get_objects_inside_radius(vector.add(pos, {x=0,y=1,z=0}), 1)
local two_below = mesecon:addPosRule(pos, {x = 0, y = -2, z = 0})
if objs[1] == nil and node.name == ppspec.onstate then
minetest.env:add_node(pos, {name = ppspec.offstate})
mesecon:receptor_off(pos)
-- force deactivation of mesecon two blocks below (hacky)
if not mesecon:connected_to_receptor(two_below) then
mesecon:turnoff(two_below)
end
else
for k, obj in pairs(objs) do
local objpos = obj:getpos()
if objpos.y > pos.y and objpos.y < pos.y+1 then
minetest.env:add_node(pos, {name=ppspec.onstate})
mesecon:receptor_on(pos)
-- force activation of mesecon two blocks below (hacky)
mesecon:turnon(two_below)
end
end
end
return true
end
function mesecon:register_pressure_plate_full_block(type, stype)
@ -8,7 +50,6 @@ function mesecon:register_pressure_plate_full_block(type, stype)
local onstate = "moremesecons_pressureplates:pressure_plate_"..stype.."_on"
local description = minetest.registered_nodes[type].description .. " Block Pressure Plate"
local textures = minetest.registered_nodes[type].tiles
local recipe = {{type},{type}}
@ -22,24 +63,33 @@ function mesecon:register_pressure_plate_full_block(type, stype)
groups = {snappy = 2, oddly_breakable_by_hand = 3},
description = description,
pressureplate = ppspec,
on_timer = pp_on_timer,
on_timer = bpp_on_timer,
mesecons = {receptor = {
state = mesecon.state.off
state = mesecon.state.off,
rules = rules,
}},
on_construct = function(pos)
minetest.env:get_node_timer(pos):start(PRESSURE_PLATE_INTERVAL)
end,
walkable = false,
})
local textures_on = {}
for i=1,#textures do
if textures[i]~=nil then
textures_on[i] = textures[i] .. "^[brighten"
end
end
minetest.register_node(onstate, {
tiles = textures,
tiles = textures_on,
groups = {snappy = 2, oddly_breakable_by_hand = 3, not_in_creative_inventory = 1},
drop = offstate,
pressureplate = ppspec,
on_timer = pp_on_timer,
on_timer = bpp_on_timer,
mesecons = {receptor = {
state = mesecon.state.on
state = mesecon.state.on,
rules = rules,
}},
on_construct = function(pos)
minetest.env:get_node_timer(pos):start(PRESSURE_PLATE_INTERVAL)
@ -50,12 +100,16 @@ function mesecon:register_pressure_plate_full_block(type, stype)
mesecon:turnoff(two_below)
end
end,
walkable = false,
})
minetest.register_craft({
output = offstate,
recipe = recipe,
recipe = {{type}, {"mesecons_pressureplates:pressure_plate_wood_off"}},
})
minetest.register_craft({
output = offstate,
recipe = {{type}, {"mesecons_pressureplates:pressure_plate_stone_off"}},
})
end
@ -81,4 +135,11 @@ mesecon:register_pressure_plate_full_block(
mesecon:register_pressure_plate_full_block(
"default:cobble",
"cobble")
"cobble")
minetest.register_craft({
output = "moremesecons_pressureplates:pressure_plate_grass_off",
recipe = {{"default:grass_1"}, {"moremesecons_pressureplates:pressure_plate_dirt_off"}},
})