990 lines
48 KiB
Lua
990 lines
48 KiB
Lua
dofile(minetest.get_modpath("luxury_decor") .. "/chairs.lua")
|
||
|
||
local flowers_list = {
|
||
name = {"rose", "tulip_black", "tulip", "geranium"},
|
||
desc = {"Rose", "Tulip Black", "Tulip", "Geranium"}
|
||
}
|
||
|
||
minetest.register_node("luxury_decor:glass_vase", {
|
||
description = "Glass Vase",
|
||
visual_scale = 0.5,
|
||
drawtype = "mesh",
|
||
mesh = "glass_vase1.b3d",
|
||
use_texture_alpha = true,
|
||
tiles = {"glass_vase.png"},
|
||
inventory_image = "glass_vase_inv.png",
|
||
sunlight_propagates = true,
|
||
paramtype = "light",
|
||
paramtype2 = "facedir",
|
||
groups = {choppy = 1.5},
|
||
collision_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2},
|
||
--[[{-0.65, -0.3, -1.46, 0.65, 1.4, -1.66},
|
||
{-0.65, -0.3, 0.46, 0.65, 1.4, 0.66}]]
|
||
}
|
||
},
|
||
selection_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}
|
||
}
|
||
},
|
||
sounds = default.node_sound_glass_defaults(),
|
||
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
|
||
for _, flower in ipairs(flowers_list.name) do
|
||
if "flowers:" .. flower == itemstack:get_name() then
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:glass_vase_with_"..flower})
|
||
end
|
||
end
|
||
end
|
||
})
|
||
|
||
--[[function set_x_or_y_for_pos(player, node, value, y) -- Finish writing!!!
|
||
local signs = {
|
||
["z"] = "0",
|
||
["x"], = "1",
|
||
["-z"], = "2",
|
||
["-x"] = "3"
|
||
}
|
||
|
||
local new_pos = {x=nil, y=y, z=nil}
|
||
for val, sign in pairs(signs) do
|
||
if value == sign then
|
||
new_pos[tonumber(string.gmatch(val, string.find(val, "-") or "") or val)] = ]]
|
||
|
||
for ind, f in pairs(flowers_list.name) do
|
||
minetest.register_node("luxury_decor:glass_vase_with_"..f, {
|
||
description = "Glass Vase With " .. flowers_list.desc[ind],
|
||
visual_scale = 0.5,
|
||
inventory_image = "glass_vase_inv.png",
|
||
mesh = "glass_vase1.b3d",
|
||
tiles = {"glass_vase.png^flowers_"..f..".png"},
|
||
paramtype = "light",
|
||
paramtype2 = "facedir",
|
||
drop = {"luxury_decor:glass_vase", "luxury_decor:glass_vase_with_"..f},
|
||
groups = {choppy = 1.5, not_in_creative_inventory=1},
|
||
use_texture_alpha = true,
|
||
drawtype = "mesh",
|
||
collision_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2},
|
||
--[[{-0.65, -0.3, -1.46, 0.65, 1.4, -1.66},
|
||
{-0.65, -0.3, 0.46, 0.65, 1.4, 0.66}]]
|
||
}
|
||
},
|
||
selection_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}
|
||
}
|
||
},
|
||
sounds = default.node_sound_glass_defaults(),
|
||
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
|
||
for _, flower in ipairs(flowers_list.name) do
|
||
if "flowers:" .. flower == itemstack:get_name() then
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:glass_vase_with_"..flower})
|
||
itemstack:add_item("luxury_decor:glass_vase")
|
||
itemstack:add_item("flowers:" .. string.sub(node.name, 30))
|
||
return itemstack
|
||
end
|
||
end
|
||
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:glass_vase"})
|
||
|
||
itemstack:add_item("flowers:" .. string.sub(node.name, 30))
|
||
end
|
||
})
|
||
end
|
||
|
||
local sofas_rgb_colors = {
|
||
["black"] = "#000000",
|
||
["red"] = "#FF0000",
|
||
["green"] = "#00FF00",
|
||
["white"] = "#FFFFFF",
|
||
["blue"] = "#0000FF",
|
||
["yellow"] = "#FFFF00",
|
||
["magenta"] = "#FF00FF",
|
||
["cyan"] = "#00FFFF",
|
||
["dark_green"] = "#008000",
|
||
["dark_grey"] = "#808080",
|
||
["grey"] = "#C0C0C0",
|
||
["brown"] = "#A52A2A",
|
||
["orange"] = "#FF4500",
|
||
["pink"] = "#F08080",
|
||
["violet"] = "#4B0082"
|
||
}
|
||
|
||
local sofas_collision_boxes = {
|
||
["1"] = {
|
||
{-0.34, -0.5, -0.4, 0.34, 0.05, 0.35}, -- Lower box
|
||
{-0.34, -0.5, 0.35, 0.34, 0.55, 0.49}, -- Back box
|
||
{-0.34, -0.5, -0.5, -0.51, 0.2, 0.49}, -- Right box
|
||
{0.34, -0.5, -0.5, 0.51, 0.2, 0.49} -- Left box
|
||
|
||
},
|
||
["2"] = {
|
||
{-0.34, -0.5, -0.5, 0.51, 0.05, 0.35},
|
||
{-0.34, -0.5, 0.35, 0.51, 0.55, 0.49},
|
||
{-0.34, -0.5, -0.5, -0.51, 0.2, 0.49}
|
||
},
|
||
["3"] = {
|
||
{-0.51, -0.5, -0.5, 0.34, 0.05, 0.35},
|
||
{-0.51, -0.5, 0.35, 0.34, 0.55, 0.49},
|
||
{0.34, -0.5, -0.5, 0.51, 0.2, 0.49}
|
||
},
|
||
["4"] = {
|
||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||
},
|
||
["5"] = {
|
||
{-0.48, -0.5, -0.5, 0.51, 0.05, 0.35},
|
||
{-0.48, -0.5, 0.35, 0.51, 0.55, 0.49},
|
||
}
|
||
}
|
||
|
||
|
||
|
||
local footstools_collision_boxes = {
|
||
["small"] = {{-0.35, -0.5, -0.35, 0.35, 0.05, 0.35}},
|
||
["middle"] = {{-0.35, -0.5, 0.23, 0.35, 0.05, -1.23}},
|
||
["long"] = {{-0.35, -0.5, 0.1, 0.35, 0.05, -2.1}}
|
||
}
|
||
|
||
|
||
function is_same_nums_sign(num1, num2)
|
||
if num1 < 0 and num2 < 0 or num1 > 0 and num2 > 0 then
|
||
return true
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
--"node1" contains: {name, param1, param2, pointed_thing, pos}
|
||
sofas = {}
|
||
|
||
sofas.define_needed_sofa_part = function (player, sofa, sofa2, replace_sofa1, replace_sofa2, pos, pointed_thing)
|
||
local ordered_axises_table = {"-x", "-z", "x", "z"}
|
||
pointed_axis = nil
|
||
node_vector = nil
|
||
local surface_pos = minetest.pointed_thing_to_face_pos(player, pointed_thing)
|
||
|
||
for axis, val in pairs(pointed_thing.above) do
|
||
if pointed_thing.under[axis] ~= val then
|
||
if surface_pos[axis] < pos[axis] then
|
||
pointed_axis = "-" .. tostring(axis)
|
||
elseif surface_pos[axis] > pos[axis] then
|
||
pointed_axis = tostring(axis)
|
||
|
||
end
|
||
end
|
||
end
|
||
|
||
for axis2, vector in pairs(minetest.facedir_to_dir(sofa.param2)) do
|
||
if vector ~= 0 then
|
||
if vector < 0 then
|
||
node_vector = "-" .. tostring(axis2)
|
||
elseif vector > 0 then
|
||
node_vector = tostring(axis2)
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
for num, axis in pairs(ordered_axises_table) do
|
||
if axis == node_vector then
|
||
node_vector_ind = num
|
||
end
|
||
end
|
||
|
||
for num, axis in pairs(ordered_axises_table) do
|
||
if axis == pointed_axis then
|
||
pointed_axis_ind = num
|
||
end
|
||
end
|
||
|
||
if pointed_axis_ind > node_vector_ind then
|
||
if pointed_axis == "z" and node_vector == "-x" then
|
||
return {replace_sofa1, replace_sofa2}
|
||
end
|
||
|
||
return {replace_sofa2, replace_sofa1}
|
||
elseif pointed_axis_ind < node_vector_ind then
|
||
if pointed_axis == "-x" and node_vector == "z" then
|
||
return {replace_sofa2, replace_sofa1}
|
||
end
|
||
|
||
return {replace_sofa1, replace_sofa2}
|
||
end
|
||
end
|
||
|
||
sofas.define_needed_sofa_pos = function (player, sofa, pointed_thing, pos)
|
||
local surface_pos = minetest.pointed_thing_to_face_pos(player, pointed_thing)
|
||
local new_pos = {x=sofa.pos.x, y=sofa.pos.y, z=sofa.pos.z}
|
||
for axis, val in pairs(pointed_thing.above) do
|
||
if val ~= pointed_thing.under[axis] then
|
||
if surface_pos[axis] < sofa.pos[axis] then
|
||
new_pos[axis] = new_pos[axis] - 1
|
||
return new_pos
|
||
elseif surface_pos[axis] > sofa.pos[axis] then
|
||
new_pos[axis] = new_pos[axis] + 1
|
||
return new_pos
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
sofas.define_sidelong_axises = function (axis)
|
||
local ordered_axles = {"-x", "-z", "x", "z"}
|
||
local axis1
|
||
local axis2
|
||
for num, axle in pairs(ordered_axles) do
|
||
if axle == axis then
|
||
if num == 1 then
|
||
axis1 = ordered_axles[#ordered_axles]
|
||
axis2 = ordered_axles[num+1]
|
||
elseif num == #ordered_axles then
|
||
axis1 = ordered_axles[num-1]
|
||
axis2 = ordered_axles[1]
|
||
else
|
||
axis1 = ordered_axles[num-1]
|
||
axis2 = ordered_axles[num+1]
|
||
end
|
||
end
|
||
end
|
||
|
||
return {[1]=axis1, [2]=axis2}
|
||
end
|
||
|
||
sofas.translate_str_vector_to_table = function (str_axis)
|
||
local vector_table = {x=0, y=0, z=0}
|
||
local axis2 = string.sub(str_axis, -1, -1)
|
||
if string.sub(str_axis, 1, 1) == "-" then
|
||
vector_table[axis2] = -1
|
||
else
|
||
vector_table[axis2] = 1
|
||
end
|
||
|
||
return vector_table
|
||
end
|
||
|
||
sofas.translate_vector_table_to_str = function (vector_table)
|
||
local str_axis
|
||
for axis, val in pairs(vector_table) do
|
||
if val ~= 0 then
|
||
if val < 0 then
|
||
str_axis = "-" .. axis
|
||
else
|
||
str_axis = tostring(axis)
|
||
end
|
||
end
|
||
end
|
||
|
||
return str_axis
|
||
end
|
||
|
||
sofas.connect_sofas = function (player, node1, node2, pos, pointed_thing)
|
||
local node_color1 = string.sub(node1.name, 22, -6)
|
||
local node_color2 = string.sub(node2, 22, -6)
|
||
local surface_pos = minetest.pointed_thing_to_face_pos(player, pointed_thing)
|
||
local used_pt_axis
|
||
local node_vector
|
||
-- Определяет ось, по которой грань была кликнута
|
||
for axis, val in pairs(pointed_thing.above) do
|
||
if val ~= pointed_thing.under[axis] and axis ~= y then
|
||
used_pt_axis = {axis=axis, val=surface_pos[axis]}
|
||
end
|
||
end
|
||
|
||
for axis, vector in pairs(minetest.facedir_to_dir(node1.param2)) do
|
||
if vector ~= 0 then
|
||
node_vector = {axis=axis, vector=vector}
|
||
end
|
||
end
|
||
|
||
-- Проверяет, цвет подушки у new_name1 такой же, как и у node2
|
||
if node_color1 == node_color2 then
|
||
-- Проверяет, node2 - полный ли диван, затем находит от позиции кликнутого дивана в радиусе 1 другие диваны
|
||
if string.find(node2, "_1_") then
|
||
if string.find(node1.name, "_1_") then
|
||
if used_pt_axis.axis ~= node_vector.axis then
|
||
local node1_table = {name=node1.name, param1=node1.param1, param2=node1.param2}
|
||
local needed_sofa_parts = sofas.define_needed_sofa_part(player, node1_table, node2, string.gsub(node1.name, "1", "2"), string.gsub(node2, "1", "3"), pos, pointed_thing)
|
||
local needed_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing, pos)
|
||
minetest.set_node(pos, {name = needed_sofa_parts[1], param1=node1.param1, param2=node1.param2})
|
||
minetest.set_node(needed_pos, {name = needed_sofa_parts[2], param1=node1.param1, param2=node1.param2})
|
||
|
||
else
|
||
return
|
||
end
|
||
elseif string.find(node1.name, "_2_") or string.find(node1.name, "_3_") then
|
||
if used_pt_axis.axis ~= node_vector.axis then
|
||
local ordered_axles = {"-x", "-z", "x", "z"}
|
||
local num1
|
||
local num2
|
||
for num, axle in pairs(ordered_axles) do
|
||
local axis = string.sub(axle, -1, -1)
|
||
local executed1 = false
|
||
local executed2 = false
|
||
local used_pt_axle
|
||
local node_vect
|
||
if used_pt_axis.val < pos[axis] and executed1 ~= true and axis == used_pt_axis.axis then -- REWRITE!!!
|
||
used_pt_axle = "-" .. tostring(used_pt_axis.axis)
|
||
executed1 = true
|
||
elseif used_pt_axis.val > pos[axis] and executed1 ~= true and axis == used_pt_axis.axis then
|
||
used_pt_axle = tostring(used_pt_axis.axis)
|
||
executed1 = true
|
||
end
|
||
|
||
if node_vector.vector < 0 and executed2 ~= true then
|
||
node_vect = "-" .. tostring(node_vector.axis)
|
||
executed2 = true
|
||
elseif node_vector.vector > 0 and executed2 ~= true then
|
||
node_vect = tostring(node_vector.axis)
|
||
executed2 = true
|
||
end
|
||
|
||
if axle == used_pt_axle then
|
||
num1 = num
|
||
end
|
||
|
||
if axle == node_vect then
|
||
num2 = num
|
||
end
|
||
|
||
if num1 ~= nil and num2 ~= nil then
|
||
|
||
if (num1 < num2 and string.find(node1.name, "_3_")) or (num1 == 4 and num2 == 1) then
|
||
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
|
||
local rep = string.gsub(node2, "1", "5")
|
||
local rep2 = string.gsub(node2, "1", "3")
|
||
minetest.set_node(pos, {name=rep, param1=node1.param1, param2=node1.param2})
|
||
minetest.set_node(needed_sofa_pos, {name=rep2, param1=node1.param1, param2=node1.param2})
|
||
return true
|
||
elseif (num1 > num2 and string.find(node1.name, "_2_")) or (num1 == 1 and num2 == 4) then
|
||
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
|
||
local rep = string.gsub(node2, "1", "5")
|
||
local rep2 = string.gsub(node2, "1", "2")
|
||
minetest.set_node(pos, {name=rep, param1=node1.param1, param2=node1.param2})
|
||
minetest.set_node(needed_sofa_pos, {name=rep2, param1=node1.param1, param2=node1.param2})
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
elseif used_pt_axis.axis == node_vector.axis then
|
||
if string.find(node1.name, "_2_") then
|
||
local ordered_axles = {"-x", "-z", "x", "z"}
|
||
local used_pt_axle
|
||
local v = used_pt_axis.axis
|
||
if used_pt_axis.val < pos[v] then
|
||
used_pt_axle = "-" .. tostring(used_pt_axis.axis)
|
||
else
|
||
used_pt_axle = tostring(used_pt_axis.axis)
|
||
end
|
||
|
||
local needed_axis
|
||
for num, axis in pairs(ordered_axles) do
|
||
|
||
if used_pt_axle == axis then
|
||
if num == #ordered_axles then
|
||
needed_axis = ordered_axles[1]
|
||
|
||
else
|
||
needed_axis = ordered_axles[num+1]
|
||
|
||
end
|
||
|
||
local new_vector = {x=0, y=0, z=0}
|
||
if string.find(needed_axis, "-") then
|
||
new_vector[string.sub(needed_axis, 2)] = 1
|
||
else
|
||
new_vector[needed_axis] = -1
|
||
end
|
||
|
||
|
||
local rep = string.gsub(node2, "1", "4")
|
||
local rep2 = string.gsub(node2, "1", "2")
|
||
minetest.set_node(pos, {name=rep, param1=node1.param1, param2=node1.param2})
|
||
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
|
||
minetest.set_node(needed_sofa_pos, {name=rep2, param1=node1.param1, param2=minetest.dir_to_facedir(new_vector)})
|
||
end
|
||
end
|
||
elseif string.find(node1.name, "_3_") then
|
||
|
||
local ordered_axles = {"-x", "-z", "x", "z"}
|
||
local needed_axis
|
||
local v = used_pt_axis.axis
|
||
local used_pt_axle
|
||
if used_pt_axis.val < pos[v] then
|
||
used_pt_axle = "-" .. tostring(used_pt_axis.axis)
|
||
else
|
||
used_pt_axle = tostring(used_pt_axis.axis)
|
||
end
|
||
|
||
for num, axis in pairs(ordered_axles) do
|
||
if used_pt_axle == axis then
|
||
if num == 1 then
|
||
needed_axis = ordered_axles[#ordered_axles]
|
||
else
|
||
needed_axis = ordered_axles[num-1]
|
||
end
|
||
|
||
local new_vector = {x=0, y=0, z=0}
|
||
if string.find(needed_axis, "-") then
|
||
new_vector[string.sub(needed_axis, -1, -1)] = 1
|
||
else
|
||
new_vector[needed_axis] = -1
|
||
end
|
||
|
||
local rep = string.gsub(node2, "1", "4")
|
||
local rep2 = string.gsub(node2, "1", "3")
|
||
minetest.set_node(pos, {name=rep, param1=node1.param1, param2=minetest.dir_to_facedir(new_vector)})
|
||
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
|
||
minetest.set_node(needed_sofa_pos, {name=rep2, param1=node1.param1, param2=minetest.dir_to_facedir(new_vector)})
|
||
return true
|
||
end
|
||
end
|
||
|
||
end
|
||
|
||
end
|
||
else
|
||
return
|
||
end
|
||
else
|
||
return
|
||
end
|
||
else
|
||
return
|
||
end
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
for color, rgb_color in pairs(sofas_rgb_colors) do
|
||
for _, pillow_color in ipairs({"red", "green" , "blue", "yellow", "violet"}) do
|
||
minetest.register_node("luxury_decor:simple_" .. color .. "_armchair_with_" .. pillow_color .. "_pillow", {
|
||
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " Armchair With " .. string.upper(pillow_color) .. " Pillow" ),
|
||
visual_scale = 0.5,
|
||
mesh = "simple_armchair.obj",
|
||
tiles = {"simple_armchair.png^(simple_armchair_2_1.png^[colorize:" .. rgb_color .. "^simple_armchair_2.png)^(simple_armchair_3.png^[colorize:" .. pillow_color .. ")"},
|
||
paramtype = "light",
|
||
paramtype2 = "facedir",
|
||
groups = {choppy = 2.5, },
|
||
drawtype = "mesh",
|
||
collision_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.31, -0.5, -0.45, 0.33, 0.15, 0.5},
|
||
{-0.5, -0.5, -0.45, -0.31, 0.36, 0.3},
|
||
{0.53, -0.5, -0.45, 0.33, 0.36, 0.3},
|
||
{-0.42, 0.15, 0.3, 0.44, 0.9, 0.5}
|
||
}
|
||
},
|
||
selection_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.31, -0.5, -0.45, 0.33, 0.15, 0.5},
|
||
{-0.5, -0.5, -0.45, -0.31, 0.36, 0.3},
|
||
{0.53, -0.5, -0.45, 0.33, 0.36, 0.3},
|
||
{-0.42, 0.15, 0.3, 0.44, 0.9, 0.5}
|
||
}
|
||
},
|
||
sounds = default.node_sound_wood_defaults(),
|
||
on_construct = function (pos)
|
||
local meta = minetest.get_meta(pos)
|
||
meta:set_string("seat", minetest.serialize({busy_by=nil, pos = {x = pos.x, y = pos.y+0.2, z = pos.z}, anim={mesh="character_sitting.b3d", range={x=1, y=80}, speed=15, blend=0, loop=true}}))
|
||
end,
|
||
after_dig_node = function (pos, oldnode, oldmetadata, digger)
|
||
local seat = minetest.deserialize(oldmetadata.fields.seat)
|
||
if seat.busy_by then
|
||
local player = minetest.get_player_by_name(seat.busy_by)
|
||
chairs.standup_player(player, pos, seat)
|
||
end
|
||
end,
|
||
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
|
||
if string.find(itemstack:get_name(), "dye:") then
|
||
local get_player_contr = clicker:get_player_control()
|
||
|
||
if get_player_contr.sneak then
|
||
for _, p_color in ipairs({"red", "green", "blue", "yellow", "violet"}) do
|
||
if itemstack:get_name() == "dye:" .. p_color then
|
||
itemstack:take_item()
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_" .. sofa_count .. "_sofa_with_" .. p_color .. "_pillow"})
|
||
end
|
||
end
|
||
else
|
||
for color2, rgb_code in pairs(sofas_rgb_colors) do
|
||
if "dye:" .. color2 == itemstack:get_name() then
|
||
itemstack:take_item()
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:simple_" .. color2 .. "_" .. sofa_count .. "_sofa_with_" .. pillow_color .. "_pillow"})
|
||
end
|
||
end
|
||
end
|
||
else
|
||
local bool = chairs.sit_player(clicker, node, pos)
|
||
if bool == nil then
|
||
chairs.standup_player(clicker, pos)
|
||
end
|
||
end
|
||
return itemstack
|
||
end
|
||
})
|
||
|
||
minetest.register_craft({
|
||
output = "luxury_decor:simple_"..color.."_armchair_with_"..pillow_color.."_pillow",
|
||
recipe = {
|
||
{"luxury_decor:wooden_board", "wool:white", "dye:"..color},
|
||
{"luxury_decor:wooden_board", "wool:white", "dye:"..pillow_color},
|
||
{"default:stick", "", ""}
|
||
}
|
||
})
|
||
end
|
||
end
|
||
|
||
for ind, sofa_count in pairs({"1", "2", "3", "4", "5"}) do
|
||
local not_in_cinv = 0
|
||
for color, rgb_color in pairs(sofas_rgb_colors) do
|
||
if sofa_count ~= "1" then
|
||
not_in_cinv = 1
|
||
end
|
||
minetest.register_node("luxury_decor:simple_".. sofa_count .. "_" .. color .. "_sofa", {
|
||
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " Sofa"),
|
||
visual_scale = 0.5,
|
||
mesh = "simple_sofa_" .. sofa_count .. ".obj",
|
||
tiles = {"simple_sofa.png^(simple_sofa_2_1.png^[colorize:" .. rgb_color.. "^simple_sofa_2.png)"},
|
||
paramtype = "light",
|
||
paramtype2 = "facedir",
|
||
groups = {choppy = 2.5, not_in_creative_inventory = not_in_cinv},
|
||
drawtype = "mesh",
|
||
collision_box = {
|
||
type = "fixed",
|
||
fixed = sofas_collision_boxes[sofa_count]
|
||
},
|
||
selection_box = {
|
||
type = "fixed",
|
||
fixed = sofas_collision_boxes[sofa_count]
|
||
},
|
||
sounds = default.node_sound_wood_defaults(),
|
||
on_construct = function (pos)
|
||
local meta = minetest.get_meta(pos)
|
||
meta:set_string("seat", minetest.serialize({busy_by=nil, pos = {x = pos.x, y = pos.y+0.2, z = pos.z}, anim={mesh="character_sitting.b3d", range={x=1, y=80}, speed=15, blend=0, loop=true}}))
|
||
end,
|
||
after_dig_node = function (pos, oldnode, oldmetadata, digger)
|
||
local seat = minetest.deserialize(oldmetadata.fields.seat)
|
||
if seat.busy_by then
|
||
local player = minetest.get_player_by_name(seat.busy_by)
|
||
chairs.standup_player(player, pos, seat)
|
||
end
|
||
end,
|
||
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
|
||
if string.find(itemstack:get_name(), "dye:") then
|
||
for color2, rgb_code in pairs(sofas_rgb_colors) do
|
||
if "dye:" .. color2 == itemstack:get_name() then
|
||
itemstack:take_item()
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:simple_" .. sofa_count .. "_" .. color2 .. "_sofa"})
|
||
end
|
||
end
|
||
|
||
elseif string.find(itemstack:get_name(), "luxury_decor:simple_") and string.find(itemstack:get_name(), "_sofa") then
|
||
sofas.connect_sofas(clicker, {name=node.name, param1=node.param1, param2=node.param2}, itemstack:get_name(), pos, pointed_thing)
|
||
else
|
||
local bool = chairs.sit_player(clicker, node, pos)
|
||
if bool == nil then
|
||
chairs.standup_player(clicker, pos)
|
||
end
|
||
end
|
||
end,
|
||
on_dig = function (pos, node, player)
|
||
if node.name == "luxury_decor:simple_2_" .. color .. "_sofa" or
|
||
node.name == "luxury_decor:simple_3_" .. color .. "_sofa" or
|
||
node.name == "luxury_decor:simple_5_" .. color .. "_sofa" then
|
||
|
||
local vector = minetest.facedir_to_dir(node.param2)
|
||
local axle1
|
||
local axle2
|
||
local ordered_axles = {"-x", "-z", "x", "z"}
|
||
for axis, val in pairs(vector) do
|
||
if val ~= 0 and axis ~= y then
|
||
if val < 0 then
|
||
axle1 = "-" .. tostring(axis)
|
||
else
|
||
axle1 = tostring(axis)
|
||
end
|
||
elseif val == 0 and axis ~= y then
|
||
axle2 = axis
|
||
end
|
||
end
|
||
|
||
local pos1 = {x=pos.x, y=pos.y, z=pos.z}
|
||
local pos2 = {x=pos.x, y=pos.y, z=pos.z}
|
||
pos1[axle2] = pos1[axle2] - 1
|
||
pos2[axle2] = pos2[axle2] + 1
|
||
local nearby_nodes = minetest.find_nodes_in_area(pos1, pos2, {"luxury_decor:simple_2_"..color.."_sofa", "luxury_decor:simple_3_"..color.."_sofa", "luxury_decor:simple_5_"..color.."_sofa",
|
||
"luxury_decor:simple_4_"..color.."_sofa"})
|
||
for num, node_pos in pairs(nearby_nodes) do
|
||
if num == 1 or num == #nearby_nodes then
|
||
local nearby_node = minetest.get_node(node_pos)
|
||
if nearby_node.name == "luxury_decor:simple_5_"..color.."_sofa" and nearby_node.param2 == node.param2 then
|
||
local ordered_axises = sofas.define_sidelong_axises(axle1)
|
||
local new_positions = {
|
||
{
|
||
{x=pos.x, y=pos.y, z=pos.z},
|
||
"luxury_decor:simple_3_"..color.."_sofa"
|
||
},
|
||
{
|
||
{x=pos.x, y=pos.y, z=pos.z},
|
||
"luxury_decor:simple_2_"..color.."_sofa"
|
||
}
|
||
}
|
||
|
||
for num, axis in pairs(ordered_axises) do
|
||
local axle = string.sub(axis, -1, -1)
|
||
if string.sub(axis, 1, 1) == "-" then
|
||
if pos[axle] + 1 == node_pos[axle] then
|
||
new_positions[num][1][axle] = new_positions[num][1][axle] + 1
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(new_positions[num][1], {name=new_positions[num][2], param1=node.param1, param2=node.param2})
|
||
end
|
||
else
|
||
if pos[axle] - 1 == node_pos[axle] then
|
||
new_positions[num][1][axle] = new_positions[num][1][axle] - 1
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(new_positions[num][1], {name=new_positions[num][2], param1=node.param1, param2=node.param2})
|
||
end
|
||
end
|
||
end
|
||
elseif (nearby_node.name == "luxury_decor:simple_2_"..color.."_sofa" or
|
||
nearby_node.name == "luxury_decor:simple_3_"..color.."_sofa") and nearby_node.param2 == node.param2 then
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(node_pos, {name="luxury_decor:simple_1_"..color.."_sofa", param1=node.param1, param2=node.param2})
|
||
elseif nearby_node.name == "luxury_decor:simple_4_"..color.."_sofa" then
|
||
local side_node_vector = minetest.facedir_to_dir(nearby_node.param2)
|
||
local side_node_vector2
|
||
for axis, val in pairs(side_node_vector) do
|
||
if val ~= 0 then
|
||
if val < 0 then
|
||
side_node_vector2 = "-" .. axis
|
||
else
|
||
side_node_vector2 = tostring(axis)
|
||
end
|
||
end
|
||
end
|
||
|
||
local side_axles = sofas.define_sidelong_axises(axle1)
|
||
for n, axis in pairs(side_axles) do
|
||
|
||
if side_node_vector2 == axle1 and n == 1 then
|
||
local needed_axis3
|
||
for num, axis in pairs(ordered_axles) do
|
||
if side_node_vector2 == axis then
|
||
if num == #ordered_axles then
|
||
needed_axis3 = ordered_axles[1]
|
||
else
|
||
needed_axis3 = ordered_axles[num+1]
|
||
end
|
||
local new_vector2 = sofas.translate_str_vector_to_table(needed_axis3)
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(node_pos, {name="luxury_decor:simple_3_"..color.."_sofa", param1=node.param1, param2=minetest.dir_to_facedir(new_vector2)})
|
||
end
|
||
end
|
||
elseif n == 2 then
|
||
for num, axis in pairs(ordered_axles) do
|
||
if axis == axle1 then
|
||
local new_vector2 = sofas.translate_str_vector_to_table(side_node_vector2)
|
||
if num == 1 then
|
||
if side_node_vector2 == ordered_axles[#ordered_axles] then
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(node_pos, {name="luxury_decor:simple_2_"..color.."_sofa", param1=node.param1, param2=minetest.dir_to_facedir(new_vector2)})
|
||
end
|
||
else
|
||
if ordered_axles[num-1] == side_node_vector2 then
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(node_pos, {name="luxury_decor:simple_2_"..color.."_sofa", param1=node.param1, param2=minetest.dir_to_facedir(new_vector2)})
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
elseif node.name == "luxury_decor:simple_4_"..color.."_sofa" then
|
||
local str_axis = sofas.translate_vector_table_to_str(minetest.facedir_to_dir(node.param2))
|
||
local ordered_axles = {"-x", "-z", "x", "z"}
|
||
|
||
local pos1 = {x=pos.x, y=pos.y, z=pos.z}
|
||
local pos2 = {x=pos.x, y=pos.y, z=pos.z}
|
||
if string.sub(str_axis, 1, 1) == "-" then
|
||
pos1[string.sub(str_axis, -1, -1)] = pos1[string.sub(str_axis, -1, -1)] + 1
|
||
else
|
||
pos1[string.sub(str_axis, -1, -1)] = pos1[string.sub(str_axis, -1, -1)] - 1
|
||
end
|
||
local side_node_axis
|
||
for num, axis in pairs(ordered_axles) do
|
||
if axis == str_axis then
|
||
if num == 1 then
|
||
side_node_axis = ordered_axles[#ordered_axles]
|
||
else
|
||
side_node_axis = ordered_axles[num-1]
|
||
end
|
||
end
|
||
end
|
||
|
||
if string.sub(side_node_axis, 1, 1) == "-" then
|
||
pos2[string.sub(side_node_axis, -1, -1)] = pos2[string.sub(side_node_axis, -1, -1)] - 1
|
||
else
|
||
pos2[string.sub(side_node_axis, -1, -1)] = pos2[string.sub(side_node_axis, -1, -1)] + 1
|
||
end
|
||
|
||
local side_node_axis_opposite
|
||
if string.sub(side_node_axis, 1, 1) == "-" then
|
||
side_node_axis_opposite = string.sub(side_node_axis, -1, -1)
|
||
else
|
||
side_node_axis_opposite = "-" .. side_node_axis
|
||
end
|
||
if minetest.get_node(pos1).name == "luxury_decor:simple_2_"..color.."_sofa" or minetest.get_node(pos1).name == "luxury_decor:simple_5_"..color.."_sofa" then
|
||
minetest.debug("1")
|
||
for num, axis in pairs(ordered_axles) do
|
||
if axis == str_axis then
|
||
if (num == 1 and ordered_axles[#ordered_axles] == side_node_axis) or ordered_axles[num-1] == side_node_axis then
|
||
minetest.debug("TRUE")
|
||
local vector_table = sofas.translate_str_vector_to_table(side_node_axis_opposite)
|
||
minetest.remove_node(pos)
|
||
if minetest.get_node(pos1).name == "luxury_decor:simple_2_"..color.."_sofa" then
|
||
minetest.set_node(pos1, {name="luxury_decor:simple_1_"..color.."_sofa", param1=node.param1, param2=minetest.dir_to_facedir(vector_table)})
|
||
elseif minetest.get_node(pos1).name == "luxury_decor:simple_5_"..color.."_sofa" then
|
||
minetest.set_node(pos1, {name="luxury_decor:simple_3_"..color.."_sofa", param1=node.param1, param2=minetest.dir_to_facedir(vector_table)})
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
if minetest.get_node(pos2).name == "luxury_decor:simple_3_"..color.."_sofa" or minetest.get_node(pos2).name == "luxury_decor:simple_5_"..color.."_sofa" then
|
||
minetest.debug("2")
|
||
local node2 = minetest.get_node(pos2)
|
||
local node2_str_vector = sofas.translate_vector_table_to_str(minetest.facedir_to_dir(node2.param2))
|
||
if str_axis == node2_str_vector then
|
||
minetest.remove_node(pos)
|
||
if node2.name == "luxury_decor:simple_3_"..color.."_sofa" then
|
||
minetest.set_node(pos2, {name="luxury_decor:simple_1_"..color.."_sofa", param1=node.param1, param2=node.param2})
|
||
elseif node2.name == "luxury_decor:simple_5_"..color.."_sofa" then
|
||
minetest.set_node(pos2, {name="luxury_decor:simple_2_"..color.."_sofa", param1=node.param1, param2=node.param2})
|
||
end
|
||
end
|
||
end
|
||
if (minetest.get_node(pos1).name and minetest.get_node(pos2).name) ~= "luxury_decor:simple_5_"..color.."_sofa" and
|
||
minetest.get_node(pos1).name ~= "luxury_decor:simple_2_"..color.."_sofa" and minetest.get_node(pos2).name ~= "luxury_decor:simple_3_"..color.."_sofa" then
|
||
minetest.remove_node(pos)
|
||
end
|
||
elseif node.name == "luxury_decor:simple_1_"..color.."_sofa" then
|
||
minetest.remove_node(pos)
|
||
end
|
||
end
|
||
})
|
||
|
||
if sofa_count == "1" then
|
||
minetest.register_craft({
|
||
output = "luxury_decor:simple_"..sofa_count.."_"..color.."_sofa",
|
||
recipe = {
|
||
{"luxury_decor:wooden_board", "luxury_decor:wooden_board", "wool:white"},
|
||
{"luxury_decor:wooden_board", "dye:"..color, "dye:grey"},
|
||
{"default:stick", "luxury_decor:brass_stick", ""}
|
||
}
|
||
})
|
||
end
|
||
|
||
end
|
||
end
|
||
|
||
|
||
|
||
for ind, footstool_type in pairs({"small", "middle", "long"}) do
|
||
for color, rgb_code in pairs(sofas_rgb_colors) do
|
||
minetest.register_node("luxury_decor:simple_" .. color .. "_" .. footstool_type .. "_footstool", {
|
||
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " " .. string.upper(footstool_type) .. " Footstool"),
|
||
visual_scale = 0.5,
|
||
mesh = "simple_"..footstool_type.."_footstool.b3d",
|
||
tiles = {"simple_sofa.png^(simple_sofa_2_1.png^[colorize:" .. rgb_code.. "^simple_sofa_2.png)"},
|
||
paramtype = "light",
|
||
paramtype2 = "facedir",
|
||
groups = {choppy = 2},
|
||
drawtype = "mesh",
|
||
collision_box = {
|
||
type = "fixed",
|
||
fixed = footstools_collision_boxes[footstool_type]
|
||
},
|
||
selection_box = {
|
||
type = "fixed",
|
||
fixed = footstools_collision_boxes[footstool_type]
|
||
},
|
||
sounds = default.node_sound_wood_defaults(),
|
||
on_construct = function (pos)
|
||
local meta = minetest.get_meta(pos)
|
||
meta:set_string("seat", minetest.serialize({busy_by=nil, pos = {x = pos.x, y = pos.y+0.2, z = pos.z}, anim={mesh="character_sitting.b3d", range={x=1, y=80}, speed=15, blend=0, loop=true}}))
|
||
end,
|
||
after_dig_node = function (pos, oldnode, oldmetadata, digger)
|
||
local seat = minetest.deserialize(oldmetadata.fields.seat)
|
||
if seat.busy_by then
|
||
local player = minetest.get_player_by_name(seat.busy_by)
|
||
chairs.standup_player(player, pos, seat)
|
||
end
|
||
end,
|
||
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
|
||
if string.find(itemstack:get_name(), "dye:") then
|
||
local get_player_contr = clicker:get_player_control()
|
||
|
||
|
||
for color2, rgb_code in pairs(sofas_rgb_colors) do
|
||
if "dye:" .. color2 == itemstack:get_name() then
|
||
itemstack:take_item()
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:simple_" .. color2 .. "_" .. footstool_type .. "_footstool", param1=node.param1, param2=node.param2})
|
||
end
|
||
end
|
||
|
||
|
||
elseif string.find(itemstack:get_name(), "luxury_decor:simple_" .. color .. "_small_footstool") then
|
||
local node_dir = minetest.facedir_to_dir(node.param2)
|
||
local footstools_types_list = {"small", "middle", "long"}
|
||
local new_pos = pos
|
||
local new_vector = node_dir
|
||
if string.find(node.name, footstools_types_list[1]) then
|
||
for axle, val in pairs(pointed_thing.above) do
|
||
if new_vector[axle] ~= 0 then new_vector[axle] = 0 end
|
||
if val ~= pointed_thing.under[axle] and axle ~= y then
|
||
if val > pos[axle] then
|
||
new_vector[axle] = -1
|
||
elseif val < pos[axle] then
|
||
new_vector[axle] = 1
|
||
end
|
||
itemstack:take_item()
|
||
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_middle_footstool", param1=node.param1, param2=minetest.dir_to_facedir(new_vector)})
|
||
end
|
||
end
|
||
elseif string.find(node.name, footstools_types_list[2]) then
|
||
for axle, val in pairs(pointed_thing.above) do
|
||
if val ~= pointed_thing.under[axle] and axle ~= y then
|
||
if node_dir[axle] > 0 then
|
||
new_pos[axle] = new_pos[axle] - 1
|
||
itemstack:take_item()
|
||
minetest.remove_node(pos)
|
||
minetest.set_node(new_pos, {name="luxury_decor:simple_" .. color .. "_long_footstool", param1=node.param1, param2=node.param2})
|
||
elseif node_dir[axle] < 0 then
|
||
itemstack:take_item()
|
||
--minetest.remove_node(pos)
|
||
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_long_footstool", param1=node.param1, param2=node.param2})
|
||
end
|
||
end
|
||
end
|
||
end
|
||
else
|
||
local bool = chairs.sit_player(clicker, node, pos)
|
||
if bool == nil then
|
||
chairs.standup_player(clicker, pos)
|
||
end
|
||
end
|
||
|
||
end
|
||
})
|
||
|
||
if footstool_type == "small" then
|
||
minetest.register_craft({
|
||
output = "luxury_decor:simple_"..color.."_"..footstool_type.."_footstool",
|
||
recipe = {
|
||
{"luxury_decor:wooden_board", "wool:white", "dye:"..color},
|
||
{"", "", ""},
|
||
{"", "", ""}
|
||
}
|
||
})
|
||
elseif footstool_type == "middle" then
|
||
minetest.register_craft({
|
||
output = "luxury_decor:simple_"..color.."_"..footstool_type.."_footstool",
|
||
recipe = {
|
||
{"luxury_decor:wooden_board", "wool:white", "dye:"..color},
|
||
{"luxury_decor:wooden_plank", "farming:string", "farming:string"},
|
||
{"", "", ""}
|
||
}
|
||
})
|
||
|
||
elseif footstool_type == "long" then
|
||
minetest.register_craft({
|
||
output = "luxury_decor:simple_"..color.."_"..footstool_type.."_footstool",
|
||
recipe = {
|
||
{"luxury_decor:wooden_board", "wool:white", "dye:"..color},
|
||
{"luxury_decor:wooden_board", "wool:white", "dye:"..color},
|
||
{"luxury_decor:wooden_plank", "", ""}
|
||
}
|
||
})
|
||
end
|
||
end
|
||
end
|
||
|
||
minetest.register_node("luxury_decor:simple_wooden_wall_clock", {
|
||
description = "Simple Wooden Wall Clock",
|
||
visual_scale = 0.5,
|
||
mesh = "simple_wooden_wall_clock.b3d",
|
||
tiles = {
|
||
{
|
||
name = "simple_wooden_wall_clock_animated.png",
|
||
animation = {type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 60.0}
|
||
}
|
||
},
|
||
inventory_image = "simple_wooden_wall_clock_inv.png",
|
||
wield_image = "simple_wooden_wall_clock_inv.png",
|
||
paramtype = "light",
|
||
paramtype2 = "facedir",
|
||
groups = {choppy = 2},
|
||
drawtype = "mesh",
|
||
collision_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.3, -0.5, 0.1, 0.3, 0.4, 0.5},
|
||
--[[{-0.65, -0.3, -1.46, 0.65, 1.4, -1.66},
|
||
{-0.65, -0.3, 0.46, 0.65, 1.4, 0.66}]]
|
||
}
|
||
},
|
||
selection_box = {
|
||
type = "fixed",
|
||
fixed = {
|
||
{-0.3, -0.5, 0.15, 0.3, 0.35, 0.5}
|
||
}
|
||
},
|
||
sounds = default.node_sound_wood_defaults()
|
||
})
|
||
|
||
minetest.register_craft({
|
||
output = "luxury_decor:simple_wooden_wall_clock",
|
||
recipe = {
|
||
{"luxury_decor:jungle_wooden_board", "luxury_decor:jungle_wooden_board", ""},
|
||
{"luxury_decor:jungle_wooden_plank", "luxury_decor:brass_stick", "luxury_decor:dial"},
|
||
{"default:copper_ingot", "default:steel_ingot", ""}
|
||
}
|
||
})
|
||
|
||
|
||
|
||
|
||
|
||
--[[for _, color in ipairs(sofas_rgb_colors) do
|
||
if color == "red" or color == "green" or color == "blue" or color == "yellow" or color == "violet" then
|
||
for _, sofa_type in ipairs({"small", "middle", "long", "corner1", "corner2"}) do
|
||
for _, pillow_color in ipairs({"red", "green", "blue", "yellow", "violet"}) do
|
||
minetest.register_node("luxury_decor:simple_".. color .. "_" .. sofa_type .. "_sofa", {
|
||
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " " .. string.upper(sofa_type) .. " Sofa",
|
||
visual_scale = 0.5,
|
||
mesh = "simple_"..sofa_type.."_sofa.obj",
|
||
tiles = {""})
|
||
})]]
|
||
|