From d84dbf38bef179a55eeb1b35bb39e35a05ec6844 Mon Sep 17 00:00:00 2001 From: Nerotic Date: Mon, 30 Jun 2014 05:38:52 -0400 Subject: [PATCH 1/2] Create beds.lua PilzAdams Beds --- mods/default/beds.lua | 237 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 mods/default/beds.lua diff --git a/mods/default/beds.lua b/mods/default/beds.lua new file mode 100644 index 00000000..a0ecdd23 --- /dev/null +++ b/mods/default/beds.lua @@ -0,0 +1,237 @@ +local player_in_bed = 0 + +local beds_list = { + { "Red Bed", "red"}, + { "Orange Bed", "orange"}, + { "Yellow Bed", "yellow"}, + { "Green Bed", "green"}, + { "Blue Bed", "blue"}, + { "Violet Bed", "violet"}, + { "Black Bed", "black"}, + { "Grey Bed", "grey"}, + { "White Bed", "white"}, +} + +for i in ipairs(beds_list) do + local beddesc = beds_list[i][1] + local colour = beds_list[i][2] + + minetest.register_node("beds:bed_bottom_"..colour, { + description = beddesc, + drawtype = "nodebox", + tiles = {"beds_bed_top_bottom_"..colour..".png", "default_wood.png", "beds_bed_side_"..colour..".png", "beds_bed_side_"..colour..".png", "beds_bed_side_"..colour..".png", "beds_bed_side_"..colour..".png"}, + 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.0, -0.5, 0.5, 0.3125, 0.5}, + + -- legs + {-0.5, -0.5, -0.5, -0.4, 0.0, -0.4}, + {0.4, 0.0, -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, + + on_rightclick = function(pos, node, clicker) + if not clicker:is_player() then + return + end + local meta = minetest.env:get_meta(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 clicker:get_player_name() == meta:get_string("player") then + if param2 == 0 then + pos.x = pos.x-1 + elseif param2 == 1 then + pos.z = pos.z+1 + elseif param2 == 2 then + pos.x = pos.x+1 + elseif param2 == 3 then + pos.z = pos.z-1 + end + pos.y = pos.y-0.5 + clicker:set_physics_override(1, 1, 1) + clicker:setpos(pos) + meta:set_string("player", "") + player_in_bed = player_in_bed-1 + elseif meta:get_string("player") == "" then + pos.y = pos.y-1 + clicker:set_physics_override(0, 0, 0) + clicker:setpos(pos) + if param2 == 0 then + clicker:set_look_yaw(math.pi) + elseif param2 == 1 then + clicker:set_look_yaw(0.5*math.pi) + elseif param2 == 2 then + clicker:set_look_yaw(0) + elseif param2 == 3 then + clicker:set_look_yaw(1.5*math.pi) + end + + meta:set_string("player", clicker:get_player_name()) + player_in_bed = player_in_bed+1 + end + end + }) + + minetest.register_node("beds:bed_top_"..colour, { + drawtype = "nodebox", + tiles = {"beds_bed_top_top_"..colour..".png", "default_wood.png", "beds_bed_side_top_r_"..colour..".png", "beds_bed_side_top_l_"..colour..".png", "beds_bed_top_front.png", "beds_bed_side_"..colour..".png"}, + paramtype = "light", + paramtype2 = "facedir", + 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.0, -0.5, 0.5, 0.3125, 0.5}, + {-0.4375, 0.3125, 0.1, 0.4375, 0.4375, 0.5}, + + -- legs + {-0.4, 0.0, 0.4, -0.5, -0.5, 0.5}, + {0.5, -0.5, 0.5, 0.4, 0.0, 0.4}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0}, + } + }, + }) + + minetest.register_alias("beds:bed_"..colour, "beds:bed_bottom_"..colour) + + minetest.register_craft({ + output = "beds:bed_"..colour, + recipe = { + {"wool:"..colour, "wool:"..colour, "wool:white", }, + {"default:stick", "", "default:stick", } + } + }) + + minetest.register_craft({ + output = "beds:bed_"..colour, + recipe = { + {"wool:white", "wool:"..colour, "wool:"..colour, }, + {"default:stick", "", "default:stick", } + } + }) + +end + +minetest.register_alias("beds:bed_bottom", "beds:bed_bottom_blue") +minetest.register_alias("beds:bed_top", "beds:bed_top_blue") +minetest.register_alias("beds:bed", "beds:bed_bottom_blue") + +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 From a52938a07c1216ffb3bb8a0c3373b65f50fa605c Mon Sep 17 00:00:00 2001 From: Nerotic Date: Mon, 30 Jun 2014 05:40:15 -0400 Subject: [PATCH 2/2] Update init.lua --- mods/default/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/default/init.lua b/mods/default/init.lua index 968cacd4..dc6535d1 100644 --- a/mods/default/init.lua +++ b/mods/default/init.lua @@ -20,3 +20,4 @@ dofile(minetest.get_modpath("default").."/crafting.lua") dofile(minetest.get_modpath("default").."/mapgen.lua") dofile(minetest.get_modpath("default").."/player.lua") dofile(minetest.get_modpath("default").."/trees.lua") +dofile(minetest.get_modpath("default").."/beds.lua")