Add loads of stuff
parent
ad2e925241
commit
941ff68e22
|
@ -0,0 +1,2 @@
|
|||
mesecons
|
||||
default
|
|
@ -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,
|
||||
})
|
|
@ -0,0 +1,2 @@
|
|||
mesecons_pressureplates
|
||||
default
|
|
@ -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")
|
|
@ -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"}},
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue