Merge branch 'new_bed_head'
This commit is contained in:
commit
29e34ae49f
46
manual_generator/content/home.md
Normal file
46
manual_generator/content/home.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
+++
|
||||||
|
title = "Repixture"
|
||||||
|
+++
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Welcome to Repixture!
|
||||||
|
|
||||||
|
### Survive
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Explore
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Decorate
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Achieve
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### And more!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Blabla.
|
||||||
|
|
||||||
|
## Player Manual
|
||||||
|
|
||||||
|
Read the [Player Manual](/manual) to learn how to play.
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
* Download page (ContentDB)
|
||||||
|
* Forum discussion
|
||||||
|
* Code repository
|
@ -83,7 +83,7 @@ Repixture recognizes the following game-related controls offered by Minetest:
|
|||||||
* <kbd>Look around</kbd>
|
* <kbd>Look around</kbd>
|
||||||
* <kbd>Left</kbd> / <kbd>Right</kbd> / <kbd>Forwards</kbd> / <kbd>Backwards</kbd>
|
* <kbd>Left</kbd> / <kbd>Right</kbd> / <kbd>Forwards</kbd> / <kbd>Backwards</kbd>
|
||||||
* <kbd>Jump</kbd>
|
* <kbd>Jump</kbd>
|
||||||
* <kbd>Sneak</kbd> (also unmounts you on boats)
|
* <kbd>Sneak</kbd> (also unmounts you on boats and gets you up from a bed)
|
||||||
* <kbd>Drop item</kbd>
|
* <kbd>Drop item</kbd>
|
||||||
* <kbd>Punch</kbd> (see below)
|
* <kbd>Punch</kbd> (see below)
|
||||||
* <kbd>Place</kbd> (see below)
|
* <kbd>Place</kbd> (see below)
|
||||||
|
@ -8,6 +8,7 @@ local S = minetest.get_translator("rp_bed")
|
|||||||
bed = {}
|
bed = {}
|
||||||
|
|
||||||
local DEFAULT_BED_COLOR = rp_paint.COLOR_AZURE_BLUE
|
local DEFAULT_BED_COLOR = rp_paint.COLOR_AZURE_BLUE
|
||||||
|
local BED_EYE_OFFSET_Y = -13
|
||||||
|
|
||||||
-- Per-user data table
|
-- Per-user data table
|
||||||
|
|
||||||
@ -77,7 +78,7 @@ local saving = false
|
|||||||
|
|
||||||
-- Timer
|
-- Timer
|
||||||
|
|
||||||
local timer_interval = 1
|
local TIMER_INTERVAL = 1
|
||||||
local timer = 0
|
local timer = 0
|
||||||
|
|
||||||
local delay_daytime = false
|
local delay_daytime = false
|
||||||
@ -124,7 +125,7 @@ local function put_player_in_bed(player)
|
|||||||
|
|
||||||
player_effects.apply_effect(player, "inbed")
|
player_effects.apply_effect(player, "inbed")
|
||||||
|
|
||||||
player:set_eye_offset(vector.new(0, -13, 0), vector.new(0, -13, 0))
|
player:set_eye_offset(vector.new(0, BED_EYE_OFFSET_Y, 0), vector.new(0, BED_EYE_OFFSET_Y, 0))
|
||||||
player:set_local_animation(
|
player:set_local_animation(
|
||||||
{x=162, y=166},
|
{x=162, y=166},
|
||||||
{x=162, y=166},
|
{x=162, y=166},
|
||||||
@ -381,24 +382,33 @@ end
|
|||||||
local function on_globalstep(dtime)
|
local function on_globalstep(dtime)
|
||||||
timer = timer + dtime
|
timer = timer + dtime
|
||||||
|
|
||||||
if timer < timer_interval then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
timer = 0
|
|
||||||
|
|
||||||
local sleeping_players = 0
|
local sleeping_players = 0
|
||||||
|
|
||||||
|
-- Count number of sleeping players;
|
||||||
|
-- also check for Sneak key
|
||||||
local in_bed = {}
|
local in_bed = {}
|
||||||
for name, data in pairs(bed_userdata.temp) do
|
for name, data in pairs(bed_userdata.temp) do
|
||||||
if data.in_bed then
|
if data.in_bed then
|
||||||
local player = minetest.get_player_by_name(name)
|
local player = minetest.get_player_by_name(name)
|
||||||
if player then
|
if player then
|
||||||
|
local ctrl = player:get_player_control()
|
||||||
|
-- Get up from bed if holding down Sneak
|
||||||
|
if ctrl and ctrl.sneak then
|
||||||
|
take_player_from_bed(player)
|
||||||
|
-- Count player
|
||||||
|
else
|
||||||
table.insert(in_bed, name)
|
table.insert(in_bed, name)
|
||||||
sleeping_players = sleeping_players + 1
|
sleeping_players = sleeping_players + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Reduce load of the following section
|
||||||
|
if timer < TIMER_INTERVAL then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
timer = 0
|
||||||
|
|
||||||
local players = minetest.get_connected_players()
|
local players = minetest.get_connected_players()
|
||||||
local player_count = #players
|
local player_count = #players
|
||||||
@ -479,133 +489,7 @@ local sounds = rp_sounds.node_sound_planks_defaults({
|
|||||||
place = {name="rp_sounds_place_planks", gain=1.0, pitch=0.8},
|
place = {name="rp_sounds_place_planks", gain=1.0, pitch=0.8},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(
|
local on_rightclick_bed_foot = function(pos, node, clicker, itemstack)
|
||||||
"rp_bed:bed_foot",
|
|
||||||
{
|
|
||||||
description = S("Bed"),
|
|
||||||
_tt_help = S("Sets the respawn position and allows to pass the night"),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "color4dir",
|
|
||||||
palette = "bed_palette.png",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
wield_image = "bed_bed_inventory.png",
|
|
||||||
inventory_image = "bed_bed_inventory.png",
|
|
||||||
tiles = {
|
|
||||||
"bed_foot.png",
|
|
||||||
{name="default_wood.png",color="white"},
|
|
||||||
"bed_side_l.png",
|
|
||||||
"bed_side_r.png",
|
|
||||||
"bed_inside.png",
|
|
||||||
"bed_back.png",
|
|
||||||
},
|
|
||||||
overlay_tiles = {
|
|
||||||
{name="bed_foot_overlay.png",color="white"},
|
|
||||||
"",
|
|
||||||
{name="bed_side_l_overlay.png",color="white"},
|
|
||||||
{name="bed_side_r_overlay.png",color="white"},
|
|
||||||
{name="bed_inside_overlay.png",color="white"},
|
|
||||||
{name="bed_back_overlay.png",color="white"},
|
|
||||||
},
|
|
||||||
use_texture_alpha = "clip",
|
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, creative_decoblock = 1, interactive_node = 1, paintable = 1 },
|
|
||||||
is_ground_content = false,
|
|
||||||
sounds = sounds,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 2/16, 0.5}
|
|
||||||
},
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 2/16, 1.5}
|
|
||||||
},
|
|
||||||
|
|
||||||
node_placement_prediction = "",
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
local under = pointed_thing.under
|
|
||||||
|
|
||||||
-- Use pointed node's on_rightclick function first, if present
|
|
||||||
local node = minetest.get_node(under)
|
|
||||||
if placer and not placer:get_player_control().sneak then
|
|
||||||
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
|
||||||
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) or itemstack
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local pos
|
|
||||||
local undername = minetest.get_node(under).name
|
|
||||||
if minetest.registered_items[undername] and minetest.registered_items[undername].buildable_to then
|
|
||||||
pos = under
|
|
||||||
else
|
|
||||||
pos = pointed_thing.above
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.is_protected(pos, placer:get_player_name()) and
|
|
||||||
not minetest.check_player_privs(placer, "protection_bypass") then
|
|
||||||
minetest.record_protection_violation(pos, placer:get_player_name())
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local node_def = minetest.registered_nodes[minetest.get_node(pos).name]
|
|
||||||
if not node_def or not node_def.buildable_to then
|
|
||||||
rp_sounds.play_place_failed_sound(placer)
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local dir = minetest.dir_to_fourdir(placer:get_look_dir())
|
|
||||||
local botpos = vector.add(pos, minetest.fourdir_to_dir(dir))
|
|
||||||
|
|
||||||
if minetest.is_protected(botpos, placer:get_player_name()) and
|
|
||||||
not minetest.check_player_privs(placer, "protection_bypass") then
|
|
||||||
minetest.record_protection_violation(botpos, placer:get_player_name())
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local bot = minetest.get_node(botpos)
|
|
||||||
local botdef = minetest.registered_nodes[bot.name]
|
|
||||||
-- Check if the 2nd node for the bed is free or already a bed head.
|
|
||||||
if not (bot.name == "rp_bed:bed_head" and bot.param2 == dir) and (not botdef or not botdef.buildable_to) then
|
|
||||||
rp_sounds.play_place_failed_sound(placer)
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local param2 = dir + (DEFAULT_BED_COLOR - 1) * 4
|
|
||||||
|
|
||||||
local footnode = {name = "rp_bed:bed_foot", param2 = param2}
|
|
||||||
local headnode = {name = "rp_bed:bed_head", param2 = param2}
|
|
||||||
minetest.set_node(pos, footnode)
|
|
||||||
minetest.set_node(botpos, headnode)
|
|
||||||
rp_sounds.play_node_sound(pos, footnode, "place")
|
|
||||||
|
|
||||||
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_destruct = function(pos)
|
|
||||||
local player_name = get_player_in_bed(pos)
|
|
||||||
if player_name then
|
|
||||||
local player = minetest.get_player_by_name(player_name)
|
|
||||||
take_player_from_bed(player)
|
|
||||||
end
|
|
||||||
|
|
||||||
set_bed_occupier(pos, nil)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local dir = minetest.fourdir_to_dir(node.param2)
|
|
||||||
local head_pos = vector.add(pos, dir)
|
|
||||||
if minetest.get_node(head_pos).name == "rp_bed:bed_head" then
|
|
||||||
minetest.remove_node(head_pos)
|
|
||||||
minetest.check_for_falling({x=head_pos.x, y=head_pos.y+1, z=head_pos.z})
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
on_blast = function(pos)
|
|
||||||
-- Needed to force on_destruct to be called
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
minetest.check_for_falling({x=pos.x, y=pos.y+1, z=pos.z})
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker, itemstack)
|
|
||||||
if not clicker:is_player() then
|
if not clicker:is_player() then
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
@ -668,7 +552,7 @@ minetest.register_node(
|
|||||||
end
|
end
|
||||||
|
|
||||||
bed_userdata.temp[clicker_name].node_pos = pos
|
bed_userdata.temp[clicker_name].node_pos = pos
|
||||||
local sleep_pos = vector.add(pos, vector.divide(minetest.fourdir_to_dir(node.param2), 2))
|
local sleep_pos = vector.add(pos, vector.multiply(minetest.fourdir_to_dir(node.param2), 0.49))
|
||||||
bed_userdata.temp[clicker_name].sleep_pos = sleep_pos
|
bed_userdata.temp[clicker_name].sleep_pos = sleep_pos
|
||||||
|
|
||||||
set_bed_occupier(pos, clicker_name)
|
set_bed_occupier(pos, clicker_name)
|
||||||
@ -676,13 +560,179 @@ minetest.register_node(
|
|||||||
put_player_in_bed(clicker)
|
put_player_in_bed(clicker)
|
||||||
end
|
end
|
||||||
return itemstack
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
local function drop_bed(pos, player)
|
||||||
|
local item = ItemStack("rp_bed:bed_foot")
|
||||||
|
if player and player:is_player() and minetest.is_creative_enabled(player:get_player_name()) then
|
||||||
|
local inv = player:get_inventory()
|
||||||
|
if not inv:contains_item("main", item) then
|
||||||
|
inv:add_item("main", item)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
minetest.add_item(pos, item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node(
|
||||||
|
"rp_bed:bed_foot",
|
||||||
|
{
|
||||||
|
description = S("Bed"),
|
||||||
|
_tt_help = S("Sets the respawn position and allows to pass the night"),
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "color4dir",
|
||||||
|
palette = "bed_palette.png",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
wield_image = "bed_bed_inventory.png",
|
||||||
|
inventory_image = "bed_bed_inventory.png",
|
||||||
|
tiles = {
|
||||||
|
"bed_foot.png",
|
||||||
|
{name="default_wood.png",color="white"},
|
||||||
|
"bed_side_l.png",
|
||||||
|
"bed_side_r.png",
|
||||||
|
"bed_inside.png",
|
||||||
|
"bed_back.png",
|
||||||
|
},
|
||||||
|
overlay_tiles = {
|
||||||
|
{name="bed_foot_overlay.png",color="white"},
|
||||||
|
"",
|
||||||
|
{name="bed_side_l_overlay.png",color="white"},
|
||||||
|
{name="bed_side_r_overlay.png",color="white"},
|
||||||
|
{name="bed_inside_overlay.png",color="white"},
|
||||||
|
{name="bed_back_overlay.png",color="white"},
|
||||||
|
},
|
||||||
|
use_texture_alpha = "clip",
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, creative_decoblock = 1, interactive_node = 1, paintable = 1 },
|
||||||
|
is_ground_content = false,
|
||||||
|
sounds = sounds,
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.5, -0.5, -0.5, 0.5, 2/16, 0.5}
|
||||||
|
},
|
||||||
|
|
||||||
|
node_placement_prediction = "",
|
||||||
|
on_rightclick = function(pos, node, clicker, itemstack)
|
||||||
|
local dir = minetest.fourdir_to_dir(node.param2)
|
||||||
|
local head_pos = vector.add(pos, dir)
|
||||||
|
local head_node = minetest.get_node(head_pos)
|
||||||
|
-- Make sure the bed is complete
|
||||||
|
if head_node.name == "rp_bed:bed_head" then
|
||||||
|
return on_rightclick_bed_foot(pos, node, clicker, itemstack)
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
end,
|
end,
|
||||||
|
|
||||||
can_dig = function(pos)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
local sleeper = get_player_in_bed(pos)
|
local under = pointed_thing.under
|
||||||
return sleeper == nil
|
|
||||||
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
|
local node = minetest.get_node(under)
|
||||||
|
if placer and not placer:get_player_control().sneak then
|
||||||
|
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
||||||
|
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) or itemstack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local pos
|
||||||
|
local undername = minetest.get_node(under).name
|
||||||
|
if minetest.registered_items[undername] and minetest.registered_items[undername].buildable_to then
|
||||||
|
pos = under
|
||||||
|
else
|
||||||
|
pos = pointed_thing.above
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.is_protected(pos, placer:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(placer, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, placer:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
local node_def = minetest.registered_nodes[minetest.get_node(pos).name]
|
||||||
|
if not node_def or not node_def.buildable_to then
|
||||||
|
rp_sounds.play_place_failed_sound(placer)
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
local dir = minetest.dir_to_fourdir(placer:get_look_dir())
|
||||||
|
local botpos = vector.add(pos, minetest.fourdir_to_dir(dir))
|
||||||
|
|
||||||
|
if minetest.is_protected(botpos, placer:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(placer, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(botpos, placer:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
local bot = minetest.get_node(botpos)
|
||||||
|
local botdef = minetest.registered_nodes[bot.name]
|
||||||
|
-- Check if the 2nd node for the bed is free to build to
|
||||||
|
if not botdef or not botdef.buildable_to then
|
||||||
|
rp_sounds.play_place_failed_sound(placer)
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
local param2 = dir + (DEFAULT_BED_COLOR - 1) * 4
|
||||||
|
|
||||||
|
local footnode = {name = "rp_bed:bed_foot", param2 = param2}
|
||||||
|
local headnode = {name = "rp_bed:bed_head", param2 = param2}
|
||||||
|
minetest.set_node(pos, footnode)
|
||||||
|
minetest.set_node(botpos, headnode)
|
||||||
|
rp_sounds.play_node_sound(pos, footnode, "place")
|
||||||
|
|
||||||
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||||
|
itemstack:take_item()
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
on_destruct = function(pos)
|
||||||
|
local player_name = get_player_in_bed(pos)
|
||||||
|
if player_name then
|
||||||
|
local player = minetest.get_player_by_name(player_name)
|
||||||
|
take_player_from_bed(player)
|
||||||
|
end
|
||||||
|
|
||||||
|
set_bed_occupier(pos, nil)
|
||||||
|
end,
|
||||||
|
after_destruct = function(pos, oldnode)
|
||||||
|
local dir = minetest.fourdir_to_dir(oldnode.param2)
|
||||||
|
local head_pos = vector.add(pos, dir)
|
||||||
|
if minetest.get_node(head_pos).name == "rp_bed:bed_head" then
|
||||||
|
minetest.remove_node(head_pos)
|
||||||
|
minetest.check_for_falling({x=head_pos.x, y=head_pos.y+1, z=head_pos.z})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
on_blast = function(pos)
|
||||||
|
-- Needed to force on_destruct/after_destruct to be called
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
minetest.check_for_falling({x=pos.x, y=pos.y+1, z=pos.z})
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Can be dug if no sleeper or digger equals sleeper
|
||||||
|
can_dig = function(pos, digger)
|
||||||
|
local sleeper_name = get_player_in_bed(pos)
|
||||||
|
if not sleeper_name then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
local sleeper = minetest.get_player_by_name(sleeper_name)
|
||||||
|
if (not digger) or (not sleeper) or (digger and digger:is_player() and sleeper == digger) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_dig = function(pos, node, digger)
|
||||||
|
-- Drop bed if neccessary
|
||||||
|
local dir = minetest.fourdir_to_dir(node.param2)
|
||||||
|
local head_pos = vector.add(pos, dir)
|
||||||
|
if minetest.get_node(head_pos).name == "rp_bed:bed_head" then
|
||||||
|
drop_bed(pos, digger)
|
||||||
|
end
|
||||||
|
return minetest.node_dig(pos, node, digger)
|
||||||
|
end,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Paint support for rp_paint mod
|
-- Paint support for rp_paint mod
|
||||||
_on_paint = function(pos, new_param2)
|
_on_paint = function(pos, new_param2)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
@ -694,8 +744,8 @@ minetest.register_node(
|
|||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
|
|
||||||
-- Drop itself, but without metadata
|
-- Drop is handled in on_dig
|
||||||
drop = "rp_bed:bed_foot",
|
drop = "",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(
|
minetest.register_node(
|
||||||
@ -706,8 +756,6 @@ minetest.register_node(
|
|||||||
paramtype2 = "color4dir",
|
paramtype2 = "color4dir",
|
||||||
palette = "bed_palette.png",
|
palette = "bed_palette.png",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
pointable = false,
|
|
||||||
diggable = false,
|
|
||||||
|
|
||||||
tiles = {
|
tiles = {
|
||||||
"bed_head.png",
|
"bed_head.png",
|
||||||
@ -726,13 +774,75 @@ minetest.register_node(
|
|||||||
{name="bed_inside_overlay.png",color="white"},
|
{name="bed_inside_overlay.png",color="white"},
|
||||||
},
|
},
|
||||||
use_texture_alpha = "clip",
|
use_texture_alpha = "clip",
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, not_in_creative_inventory = 1 },
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, not_in_creative_inventory = 1, paintable = 1 },
|
||||||
sounds = sounds,
|
sounds = sounds,
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 2/16, 0.5}
|
fixed = {-0.5, -0.5, -0.5, 0.5, 2/16, 0.5}
|
||||||
},
|
},
|
||||||
on_blast = function() end,
|
|
||||||
|
on_rightclick = function(pos, node, clicker, itemstack)
|
||||||
|
local dir = minetest.fourdir_to_dir(node.param2)
|
||||||
|
local foot_pos = vector.subtract(pos, dir)
|
||||||
|
local foot_node = minetest.get_node(foot_pos)
|
||||||
|
if foot_node.name == "rp_bed:bed_foot" then
|
||||||
|
return on_rightclick_bed_foot(foot_pos, foot_node, clicker, itemstack)
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
|
|
||||||
|
after_destruct = function(pos, oldnode)
|
||||||
|
local dir = minetest.fourdir_to_dir(oldnode.param2)
|
||||||
|
local foot_pos = vector.subtract(pos, dir)
|
||||||
|
if minetest.get_node(foot_pos).name == "rp_bed:bed_foot" then
|
||||||
|
minetest.remove_node(foot_pos)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_blast = function(pos)
|
||||||
|
-- Needed to force after_destruct to be called
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
minetest.check_for_falling({x=pos.x, y=pos.y+1, z=pos.z})
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Can be dug if no sleeper or digger equaals sleeper
|
||||||
|
can_dig = function(pos, digger)
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
local dir = minetest.fourdir_to_dir(node.param2)
|
||||||
|
local foot_pos = vector.subtract(pos, dir)
|
||||||
|
local sleeper_name = get_player_in_bed(foot_pos)
|
||||||
|
if not sleeper_name then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
local sleeper = minetest.get_player_by_name(sleeper_name)
|
||||||
|
if (not digger) or (not sleeper) or (digger and digger:is_player() and sleeper == digger) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
if sleeper and sleeper:is_player() and digger and digger:is_player() and sleeper == digger then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end,
|
||||||
|
on_dig = function(pos, node, digger)
|
||||||
|
-- Drop bed if neccessary
|
||||||
|
local dir = minetest.fourdir_to_dir(node.param2)
|
||||||
|
local foot_pos = vector.subtract(pos, dir)
|
||||||
|
if minetest.get_node(foot_pos).name == "rp_bed:bed_foot" then
|
||||||
|
drop_bed(foot_pos, digger)
|
||||||
|
end
|
||||||
|
return minetest.node_dig(pos, node, digger)
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Paint support for rp_paint mod
|
||||||
|
_on_paint = function(pos, new_param2)
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
local dir = minetest.fourdir_to_dir(node.param2)
|
||||||
|
local foot_pos = vector.subtract(pos, dir)
|
||||||
|
if minetest.get_node(foot_pos).name == "rp_bed:bed_foot" then
|
||||||
|
minetest.swap_node(foot_pos, {name = "rp_bed:bed_foot", param2=new_param2})
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end,
|
||||||
drop = "",
|
drop = "",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user