351 lines
9.9 KiB
Lua
351 lines
9.9 KiB
Lua
minetest.register_node("mt2d:blocking", {
|
|
description = "blocking",
|
|
drawtype="airlike",
|
|
pointable=false,
|
|
mt2d=true,
|
|
groups={blockingsky=1},
|
|
after_destruct = function(pos, oldnode)
|
|
local m=minetest.get_meta(pos)
|
|
if m:get_int("reset")==0 then
|
|
minetest.after(1, function(pos)
|
|
minetest.set_node(pos,{name="mt2d:blocking"})
|
|
m:set_int("reset",1)
|
|
minetest.get_node_timer(pos):start(1)
|
|
end,pos)
|
|
end
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
minetest.get_meta(pos):set_int("reset",0)
|
|
end,
|
|
})
|
|
|
|
minetest.register_lbm({
|
|
name = "mt2d:blockingfix",
|
|
nodenames = {"mt2d:blocking"},
|
|
--run_at_every_load=true,
|
|
action = function(pos, node)
|
|
for x=-1,1,2 do
|
|
for y=-1,1,2 do
|
|
local p={x=pos.x+x,y=pos.y+y,z=pos.z}
|
|
if minetest.get_node(p).name~="mt2d:blocking" then
|
|
minetest.set_node(p, node)
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mt2d:blocking_stone", {
|
|
description = "blocking stone",
|
|
mt2d=true,
|
|
groups={blockingsky=1},
|
|
tiles={"default_stone.png^[colorize:#00000055"},
|
|
drawtype = "liquid",
|
|
liquidtype = "source",
|
|
liquid_range = 0,
|
|
liquid_alternative_flowing = "mt2d:blocking_stone",
|
|
liquid_alternative_source = "mt2d:blocking_stone",
|
|
on_blast = function(pos, intensity)
|
|
minetest.registered_nodes["mt2d:blocking_stone"].after_destruct(pos)
|
|
end,
|
|
after_destruct = function(pos, oldnode)
|
|
local m=minetest.get_meta(pos)
|
|
if m:get_int("reset")==0 then
|
|
minetest.after(1, function(pos)
|
|
minetest.set_node(pos,{name="mt2d:blocking_stone"})
|
|
m:set_int("reset",1)
|
|
minetest.get_node_timer(pos):start(1)
|
|
end,pos)
|
|
end
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
minetest.get_meta(pos):set_int("reset",0)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mt2d:blocking_sky", {
|
|
description = "blocking sky",
|
|
mt2d=true,
|
|
groups={blockingsky=1},
|
|
tiles={"default_cloud.png^[colorize:#9ee7ffff"},
|
|
drawtype = "liquid",
|
|
liquidtype = "source",
|
|
liquid_range = 0,
|
|
liquid_alternative_flowing = "mt2d:blocking_sky",
|
|
liquid_alternative_source = "mt2d:blocking_sky",
|
|
on_blast = function(pos, intensity)
|
|
minetest.registered_nodes["mt2d:blocking_sky"].after_destruct(pos)
|
|
end,
|
|
after_destruct = function(pos, oldnode)
|
|
local m=minetest.get_meta(pos)
|
|
if m:get_int("reset")==0 then
|
|
minetest.after(1, function(pos)
|
|
minetest.set_node(pos,{name="mt2d:blocking_sky"})
|
|
m:set_int("reset",1)
|
|
minetest.get_node_timer(pos):start(1)
|
|
end,pos)
|
|
end
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
minetest.get_meta(pos):set_int("reset",0)
|
|
end,
|
|
})
|
|
|
|
mt2d.registry_door=function(name,description,texture,groups,locked,sound_open,sound_close,sounds,replace)
|
|
|
|
minetest.register_node("mt2d:door_" .. name .. "_a",{
|
|
description = description,
|
|
groups = groups,
|
|
drawtype="nodebox",
|
|
paramtype="light",
|
|
paramtype2 = "facedir",
|
|
tiles = {texture},
|
|
drop=replace,
|
|
sounds=sounds,
|
|
mt2d=true,
|
|
node_box = {
|
|
type="fixed",
|
|
fixed={0.4,-0.5,0,0.5,1.5,0}
|
|
},
|
|
selection_box={
|
|
type="fixed",
|
|
fixed={-0.5,-0.5,0,0.5,1.5,0}
|
|
},
|
|
collision_box={
|
|
type="fixed",
|
|
fixed={0.4,-0.5,-0.5,0.5,1.5,0.5}
|
|
},
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta=minetest.get_meta(pos)
|
|
local owner=meta:get_string("owner")
|
|
if owner~="" and owner~=player:get_player_name() then
|
|
return
|
|
end
|
|
minetest.swap_node(pos, {name="mt2d:door_" .. name .. "_b"})
|
|
meta:set_int("p",meta:get_int("p"))
|
|
meta:set_string("owner",owner)
|
|
minetest.sound_play(sound_open,{pos=pos,gain=0.3,max_hear_distance=10})
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
local pname=placer:get_player_name()
|
|
local ob=mt2d.user[pname]
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
if locked then
|
|
meta:set_string("owner",pname)
|
|
end
|
|
|
|
if ob and ob.object and ob.object:get_pos().x<pos.x then
|
|
minetest.swap_node(pos, {name="mt2d:door_" .. name .. "_a", param2=0})
|
|
else
|
|
minetest.swap_node(pos, {name="mt2d:door_" .. name .. "_a", param2=2})
|
|
meta:set_int("p",2)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mt2d:door_" .. name .. "_b",{
|
|
description = description,
|
|
drop=replace,
|
|
groups = groups,
|
|
drawtype="nodebox",
|
|
paramtype="light",
|
|
paramtype2 = "facedir",
|
|
tiles = {texture},
|
|
sounds=sounds,
|
|
mt2d=true,
|
|
walkable=false,
|
|
node_box = {
|
|
type="fixed",
|
|
fixed={-0.5,-0.5,-0.1,0.5,1.5,-0.1}
|
|
},
|
|
on_rightclick = function(pos,node,player)
|
|
local meta=minetest.get_meta(pos)
|
|
local owner=meta:get_string("owner")
|
|
if owner~="" and owner~=player:get_player_name() then
|
|
return
|
|
end
|
|
minetest.swap_node(pos, {name="mt2d:door_" .. name .. "_a",param2=meta:get_int("p")})
|
|
meta:set_int("p",meta:get_int("p"))
|
|
meta:set_string("owner",owner)
|
|
minetest.sound_play(sound_close,{pos=pos,gain=0.3,max_hear_distance=10})
|
|
end
|
|
})
|
|
|
|
minetest.after(0.1, function(name,replace)
|
|
minetest.registered_items[replace].on_place=function(itemstack, user, pointed_thing)
|
|
|
|
if not pointed_thing.above or pointed_thing.above.z~=0 then
|
|
return itemstack
|
|
end
|
|
|
|
local pos=pointed_thing.above
|
|
pointed_thing.above={x=pos.x,y=pos.y,z=0}
|
|
|
|
local def=minetest.registered_nodes[minetest.get_node(pointed_thing.above).name]
|
|
|
|
if minetest.is_protected(pointed_thing.above,user:get_player_name()) or not def or def.buildable_to==false or minetest.get_node({x=pos.x,y=pos.y+1,z=0}).name~="air" then
|
|
return itemstack
|
|
else
|
|
itemstack:take_item()
|
|
end
|
|
minetest.registered_items["mt2d:door_" .. name .. "_a"].after_place_node(pointed_thing.above,user)
|
|
return itemstack
|
|
end
|
|
end,name,replace)
|
|
|
|
|
|
end
|
|
|
|
mt2d.registry_door(
|
|
"wood",
|
|
"Wooden door",
|
|
"default_wood.png",
|
|
{choppy = 2, oddly_breakable_by_hand = 2,not_in_creative_inventory=1},
|
|
false,
|
|
"doors_door_open",
|
|
"doors_door_close",
|
|
default.node_sound_wood_defaults(),
|
|
"doors:door_wood"
|
|
)
|
|
|
|
mt2d.registry_door(
|
|
"glass",
|
|
"Glass door",
|
|
"default_glass.png",
|
|
{ckracky=2, oddly_breakable_by_hand = 2,not_in_creative_inventory=1},
|
|
false,
|
|
"doors_glass_door_open",
|
|
"doors_glass_door_close",
|
|
default.node_sound_glass_defaults(),
|
|
"doors:door_glass"
|
|
)
|
|
|
|
mt2d.registry_door(
|
|
"steel",
|
|
"Steel door",
|
|
"default_steel_block.png",
|
|
{cracky=1,not_in_creative_inventory=1},
|
|
true,
|
|
"doors_steel_door_open",
|
|
"doors_steel_door_close",
|
|
default.node_sound_metal_defaults(),
|
|
"doors:door_steel"
|
|
)
|
|
|
|
mt2d.registry_door(
|
|
"obsidian_glass",
|
|
"Obsidian glass door",
|
|
"default_obsidian_glass.png",
|
|
{cracky= 1,not_in_creative_inventory=1},
|
|
false,
|
|
"doors_glass_door_open",
|
|
"doors_glass_door_close",
|
|
default.node_sound_glass_defaults(),
|
|
"doors:door_obsidian_glass"
|
|
)
|
|
|
|
for i, t in pairs({{"bed","Bed"},{"fancy_bed","Fancy bed"}}) do
|
|
minetest.register_node("mt2d:" .. t[1],{
|
|
description = t[1],
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2,not_in_creative_inventory=1},
|
|
drawtype="nodebox",
|
|
paramtype="light",
|
|
tiles = {"mt2d_" .. t[1] ..".png"},
|
|
sounds=default.node_sound_wood_defaults(),
|
|
mt2d=true,
|
|
walkable=false,
|
|
node_box = {
|
|
type="fixed",
|
|
fixed={-0.5,-0.5,0,1.5,0.25,0}
|
|
},
|
|
on_rightclick = function(pos,node,player)
|
|
local name=player:get_player_name()
|
|
if not mt2d.user[name] and mt2d.user[name].object then
|
|
return
|
|
end
|
|
mt2d.user[name].object:set_pos({x=pos.x+0.5,y=pos.y+1.2,z=0})
|
|
mt2d.user[name].cam:get_luaentity().laying=true
|
|
minetest.get_node_timer(pos):start(10)
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
local time=minetest.get_timeofday()
|
|
local time_is=time<0.2 or time>0.8
|
|
local lay
|
|
|
|
for _, ob in ipairs(minetest.get_objects_inside_radius(pos, 2)) do
|
|
local en=ob:get_luaentity()
|
|
if en and en.username and mt2d.user[en.username] and mt2d.user[en.username].cam and mt2d.user[en.username].cam:get_luaentity().laying then
|
|
lay=true
|
|
break
|
|
end
|
|
end
|
|
|
|
if not lay then
|
|
return false
|
|
elseif not time_is then
|
|
return true
|
|
end
|
|
|
|
for i, u in pairs(mt2d.user) do
|
|
if u.cam and u.cam:get_luaentity() then
|
|
if not u.cam:get_luaentity().laying then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
minetest.set_timeofday(0.23)
|
|
for i, u in pairs(mt2d.user) do
|
|
if u.cam and u.cam:get_luaentity() and u.cam:get_luaentity().laying then
|
|
u.cam:get_luaentity().wakeup=true
|
|
end
|
|
end
|
|
end
|
|
})
|
|
minetest.after(0.1, function()
|
|
minetest.registered_nodes["beds:" .. t[1]].on_place=function(itemstack, user, pointed_thing)
|
|
local pos=pointed_thing.above
|
|
if not pos or minetest.get_node({x=pos.x-1,y=pos.y,z=0}).name~="air" then return false end
|
|
minetest.set_node(pos,{name="mt2d:" .. t[1]})
|
|
end
|
|
end)
|
|
end
|
|
|
|
minetest.register_craft({
|
|
output = "mt2d:stoprail 18",
|
|
recipe = {
|
|
{"default:steel_ingot","group:wood","default:steel_ingot"},
|
|
{"default:steel_ingot","group:stick","default:steel_ingot"},
|
|
{"default:steel_ingot","group:wood","default:steel_ingot"},
|
|
}
|
|
})
|
|
|
|
minetest.register_node("mt2d:stoprail", {
|
|
description = "Stoprail",
|
|
walkable=false,
|
|
inventory_image="carts_rail_straight.png^[colorize:#ff0000aa",
|
|
groups={dig_immediate=2,rail=1,connect_to_raillike=minetest.raillike_group("rail")},
|
|
tiles={"carts_rail_crossing_pwr.png^[colorize:#ff0000aa"},
|
|
})
|
|
|
|
mt2d.register_ore=function(def)
|
|
minetest.register_ore({
|
|
ore_type="scatter",
|
|
ore=def.ore,
|
|
wherein="default:stone",
|
|
clust_scarcity=def.scarcity and (def.scarcity*def.scarcity*def.scarcity) or (8*8*8),
|
|
clust_num_ores=15,
|
|
clust_size=def.size or 3,
|
|
y_max=def.y_max or 0,
|
|
y_min=-31000
|
|
})
|
|
end
|
|
mt2d.register_ore({ore="default:stone_with_coal",scarcity=6,y_max=16})
|
|
mt2d.register_ore({ore="default:stone_with_iron",scarcity=7})
|
|
mt2d.register_ore({ore="default:stone_with_copper",scarcity=8,y_max=-16})
|
|
mt2d.register_ore({ore="default:stone_with_tin",scarcity=8,y_max=-32})
|
|
mt2d.register_ore({ore="default:stone_with_gold",scarcity=8,y_max=-100})
|
|
mt2d.register_ore({ore="default:stone_with_mese",scarcity=9,y_max=-700})
|
|
mt2d.register_ore({ore="default:stone_with_diamond",scarcity=10,y_max=-700})
|
|
mt2d.register_ore({ore="default:mese",scarcity=15,y_max=-1000})
|