BlockColor-CDB/mods/Decorations/beds/init.lua

176 lines
5.1 KiB
Lua

local player_in_bed = 0
local beds_list = {
{"black", "Darkened", color1, 40, 36, 33},
{"blue", "Blue", color2, 0, 0, 255},
{"green", "Green", color3, 0, 255, 0},
{"white", "White", color4, 245, 245, 245},
{"orange", "Orange", color5, 255, 97, 3},
{"red", "Red", color6, 255, 0, 0},
{"yellow", "Yellow", color7, 255, 255, 0},
{"pink", "Pink", color8, 255, 105, 180}
}
for i in ipairs(beds_list) do
local colour = beds_list[i][1]
local beddesc= beds_list[i][2]
local colour2 = beds_list[i][3]
minetest.register_node("beds:bed_bottom_"..colour, {
description = beddesc,
drawtype = "nodebox",
tiles = {"color_white.png^[colorize:#"..colour2..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70"},
wield_image = "color_handwhite.png^(color_handwhite2.png^[colorize:#"..colour2..":70)",
wield_scale = {x=1,y=1,z=0.5},
inventory_image = "beds.png^[colorize:#".. colour2 .. ":70",
paramtype = "light",
paramtype2 = "facedir",
stack_max = 1,
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(),
node_box = {
type = "fixed",
fixed = {
-- bed
{-0.5, -0.25, -0.5, 0.5, 0, 0.5},
{-0.4375, 0, 0.1, -0.4375, 0, 0.1},
-- legs
{-0.5, -0.5, -0.5, -0.4, -0.25, -0.4},
{0.4, -0.25, -0.4, 0.5, -0.5, -0.5},
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.3125, 1.5},
}
},
after_place_node = function(pos, placer, itemstack)
local node = minetest.env:get_node(pos)
local p = {x=pos.x, y=pos.y, z=pos.z}
local param2 = node.param2
node.name = "beds:bed_top_"..colour
if param2 == 0 then
pos.z = pos.z+1
elseif param2 == 1 then
pos.x = pos.x+1
elseif param2 == 2 then
pos.z = pos.z-1
elseif param2 == 3 then
pos.x = pos.x-1
end
if minetest.registered_nodes[minetest.env:get_node(pos).name].buildable_to then
minetest.env:set_node(pos, node)
else
minetest.env:remove_node(p)
return true
end
end,
on_destruct = function(pos)
local node = minetest.env:get_node(pos)
local param2 = node.param2
if param2 == 0 then
pos.z = pos.z+1
elseif param2 == 1 then
pos.x = pos.x+1
elseif param2 == 2 then
pos.z = pos.z-1
elseif param2 == 3 then
pos.x = pos.x-1
end
if( minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z}).name == "beds:bed_top_"..colour ) then
if( minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z}).param2 == param2 ) then
minetest.env:remove_node(pos)
end
end
end,
})
minetest.register_node("beds:bed_top_"..colour, {
drawtype = "nodebox",
tiles = {"beds_bed_top_top.png^[colorize:#"..colour2..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70", "color_white.png^[colorize:#"..color5..":70"},
paramtype = "light",
paramtype2 = "facedir",
wield_image = "color_handwhite.png^(color_handwhite2.png^[colorize:#"..colour2..":70)",
wield_scale = {x=1,y=1,z=0.5},
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(),
node_box = {
type = "fixed",
fixed = {
-- bed
{-0.5, -0.25, -0.5, 0.5, 0, 0.5},
{-0.4375, 0, 0.05, 0.4375, 0.10, 0.45},
-- legs
{-0.4, -0.5, 0.4, -0.5, -0.25, 0.5},
{0.5, -0.25, 0.5, 0.4, -0.5, 0.4},
}
},
selection_box = {
type = "fixed",
fixed = {
{0, 0, 0, 0, 0, 0},
}
},
})
minetest.register_alias("beds:bed_"..colour, "beds:bed_bottom_"..colour)
end
beds_player_spawns = {}
local file = io.open(minetest.get_worldpath().."/beds_player_spawns", "r")
if file then
beds_player_spawns = minetest.deserialize(file:read("*all"))
file:close()
end
local timer = 0
local wait = false
minetest.register_globalstep(function(dtime)
if timer<2 then
timer = timer+dtime
return
end
timer = 0
local players = #minetest.get_connected_players()
if players == player_in_bed and players ~= 0 then
if minetest.env:get_timeofday() < 0.2 or minetest.env:get_timeofday() > 0.805 then
if not wait then
minetest.chat_send_all("Good night!!!")
minetest.after(2, function()
minetest.env:set_timeofday(0.23)
wait = false
end)
wait = true
for _,player in ipairs(minetest.get_connected_players()) do
beds_player_spawns[player:get_player_name()] = player:getpos()
end
local file = io.open(minetest.get_worldpath().."/beds_player_spawns", "w")
if file then
file:write(minetest.serialize(beds_player_spawns))
file:close()
end
end
end
end
end)
minetest.register_on_respawnplayer(function(player)
local name = player:get_player_name()
if beds_player_spawns[name] then
player:setpos(beds_player_spawns[name])
return true
end
end)
if minetest.setting_get("log_mods") then
minetest.log("action", "beds loaded")
end