EinsDreiDreiSieben/mods/ma_pops_furniture/misc.lua

973 lines
32 KiB
Lua

minetest.register_node("ma_pops_furniture:smoke_detector", {
description = "Smoke Detector",
tiles = {
"mp_t.png",
"mp_b.png",
"mp_si.png",
"mp_si.png",
"mp_si.png",
"mp_si.png"
},
groups = {cracky = 3, oddly_breakable_by_hand = 3},
on_timer = function(pos,elapsed)
if minetest.find_node_near(pos, 20, {"fire:basic_flame"}, false) then
local node = minetest.get_node(pos)
node.name = "ma_pops_furniture:smoke_detector_on"
minetest.remove_node(pos)
minetest.add_node(pos, node)
minetest.get_node_timer(pos):start(0.0)
else
-- Update every 10 seconds.
minetest.get_node_timer(pos):start(10.0)
end
end,
after_place_node = function(pos, placer, itemstack, pointed_thing)
minetest.get_node_timer(pos):start(0.0)
end,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.375, 0.375, -0.375, 0.375, 0.5, 0.375}, -- NodeBox1
{-0.3125, 0.3125, -0.3125, 0.3125, 0.375, 0.3125}, -- NodeBox2
}
}
})
minetest.register_node("ma_pops_furniture:smoke_detector_on", {
description = "Smoke Detector",
tiles = {
"mp_t.png",
"mp_b.png",
"mp_si.png",
"mp_si.png",
"mp_si.png",
"mp_si.png"
},
on_destruct = function(pos)
local meta = minetest.get_meta(pos)
if meta then
local tmp = meta:to_table()
if tmp then
if tmp.fields.sound_handle then
minetest.sound_stop(tmp.fields.sound_handle)
tmp.fields.sound_handle = nil
meta:from_table(tmp)
end
end
end
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local meta = minetest.get_meta(pos)
if meta then
local tmp = meta:to_table()
if tmp then
if tmp.fields.sound_handle then
minetest.sound_stop(tmp.fields.sound_handle)
tmp.fields.sound_handle = nil
minetest.get_node_timer(pos):start(3.0)
meta:from_table(tmp)
end
end
end
end,
drop = 'ma_pops_furniture:smoke_detector',
groups = {cracky = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory= 1},
on_timer = function(pos,elapsed)
if minetest.find_node_near(pos, 20, {"fire:basic_flame"}, false) then
-- Play sound.
local meta = minetest.get_meta(pos)
if meta then
local tmp = meta:to_table()
if tmp then
if not tmp.fields.sound_handle then
local handle = minetest.sound_play("mp_smoke_detector", {pos = pos, gain = 2.1,max_hear_distance = 96,loop = true})
tmp.fields.sound_handle = handle
end
end
meta:from_table(tmp)
end
-- Update every 1.0 second.
minetest.get_node_timer(pos):start(1.0)
else
local meta = minetest.get_meta(pos)
if meta then
local tmp = meta:to_table()
if tmp then
minetest.sound_stop(tmp.fields.sound_handle)
if tmp.fields.sound_handle then
tmp.fields.sound_handle = nil
meta:from_table(tmp)
end
end
end
local node = minetest.get_node(pos)
node.name = "ma_pops_furniture:smoke_detector"
minetest.remove_node(pos)
minetest.add_node(pos, node)
minetest.get_node_timer(pos):start(0.0)
end
end,
drawtype = "nodebox",
paramtype = "light",
light_source = light,
node_box = {
type = "fixed",
fixed = {
{-0.375, 0.375, -0.375, 0.375, 0.5, 0.375}, -- NodeBox1
{-0.3125, 0.3125, -0.3125, 0.3125, 0.375, 0.3125}, -- NodeBox2
}
}
})
minetest.register_lbm({
label = "Replace all smoke detector's that are turned on.",
name = "ma_pops_furniture:replace_smoke_detector_on",
nodenames = {"ma_pops_furniture:smoke_detector_on"},
run_at_every_load = true,
action = function(pos, node)
node.name = "ma_pops_furniture:smoke_detector"
minetest.remove_node(pos)
minetest.add_node(pos, node)
minetest.get_node_timer(pos):start(0.0)
end
})
minetest.register_node("ma_pops_furniture:barrel", {
description = "Barrel",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {
"mp_barrel.png", --top
"mp_barrel.png", --bottom
"mp_barrel.png^[transformR90", --right
"mp_barrel.png^[transformR90", --left
"mp_barrel_top.png", --back
"mp_barrel_top.png" --front
},
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
local inv = meta:get_inventory()
inv:set_size('main', 8*4)
inv:set_size('storage', 9*3)
meta:set_string('formspec',
'size [9,9]'..
'bgcolor[#080808BB;false]'..
'list[current_name;storage;0,0.2;9,3;]'..
'list[current_player;main;0.5,5;8,4;]')
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty('storage') and inv:is_empty('storage1')
end,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
}
}
})
minetest.register_node("ma_pops_furniture:blinds", {
description = "Blinds",
tiles = {"mp_blinds.png"},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, furniture = 1},
sunlight_propagates = true;
node_box = {
type = "fixed",
fixed = {
{-0.5, 0.5, 0.5, 0.5, 0.4, 0.4},
{-0.5, 0.3, 0.5, 0.5, 0.2, 0.4},
{-0.5, 0.1, 0.5, 0.5, 0.0, 0.4},
{-0.5, -0.1, 0.5, 0.5, -0.2, 0.4},
{-0.5, -0.3, 0.5, 0.5, -0.4, 0.4},
},
}
})
minetest.register_node("ma_pops_furniture:light", {
description = "Ceiling Light",
tiles = {
"default_coral_skeleton.png",
"mp_ceiling_light_bottom.png",
"mp_ceiling_light_side.png",
"mp_ceiling_light_side.png",
"mp_ceiling_light_side.png",
"mp_ceiling_light_side.png"
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:light_on"
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2},
node_box = {
type = "fixed",
fixed = {
{-0.25, 0.4375, -0.25, 0.25, 0.5, 0.25}, -- NodeBox1
{-0.125, 0.3125, -0.125, 0.125, 0.4375, 0.125}, -- NodeBox2
{-0.1875, -0.0625, -0.1875, 0.1875, 0.3125, 0.1875}, -- NodeBox3
},
}
})
minetest.register_node("ma_pops_furniture:light_on", {
description = "Ceiling Light",
tiles = {
"default_coral_skeleton.png",
"mp_ceiling_light_bottom.png",
"mp_ceiling_light_side.png",
"mp_ceiling_light_side.png",
"mp_ceiling_light_side.png",
"mp_ceiling_light_side.png"
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
drop = "ma_pops_furniture:light",
light_source = 14,
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:light"
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
node_box = {
type = "fixed",
fixed = {
{-0.25, 0.4375, -0.25, 0.25, 0.5, 0.25}, -- NodeBox1
{-0.125, 0.3125, -0.125, 0.125, 0.4375, 0.125}, -- NodeBox2
{-0.1875, -0.0625, -0.1875, 0.1875, 0.3125, 0.1875}, -- NodeBox3
},
}
})
minetest.register_node("ma_pops_furniture:ceiling_lamp", {
description = "Ceiling Lamp",
tiles = {
"default_stone.png",
"default_stone.png^mp_light_off.png",
"default_stone.png",
"default_stone.png",
"default_stone.png",
"default_stone.png"
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:ceiling_lamp_on"
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2},
node_box = {
type = "fixed",
fixed = {
{-0.050, 0.5, -0.050, 0.050, -0.2, 0.050},
{-0.1, -0.0, -0.1, 0.1, -0.2, 0.1},
{-0.2, -0.1, -0.2, 0.2, -0.2, 0.2},
{-0.3, -0.2, -0.3, 0.3, -0.5, 0.3},
},
}
})
minetest.register_node("ma_pops_furniture:ceiling_lamp_on", {
description = "Ceiling Lamp On",
tiles = {
"default_stone.png",
"default_stone.png^mp_light_on.png",
"default_stone.png",
"default_stone.png",
"default_stone.png",
"default_stone.png"
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
light_source = 14,
drop = 'ma_pops_furniture:ceiling_lamp',
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:ceiling_lamp"
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
node_box = {
type = "fixed",
fixed = {
{-0.050, 0.5, -0.050, 0.050, -0.2, 0.050},
{-0.1, -0.0, -0.1, 0.1, -0.2, 0.1},
{-0.2, -0.1, -0.2, 0.2, -0.2, 0.2},
{-0.3, -0.2, -0.3, 0.3, -0.5, 0.3},
},
}
})
minetest.register_node("ma_pops_furniture:fan_on", {
description = "Fan (on)",
tiles = {
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png",
{
name = "mp_fan_on.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.3
},
},
},
drawtype = "nodebox",
drop = 'ma_pops_furniture:fan_off',
paramtype2 = "facedir",
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:fan_off"
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, not_in_creative_inventory = 1},
node_box = {
type = "fixed",
fixed = {
{-0.5, 0.5, 0.2, 0.5, -0.5, -0.2},
},
}
})
minetest.register_node("ma_pops_furniture:fan_off", {
description = "Fan",
tiles = {
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"mp_fan_off.png",
"mp_fan_off.png",
},
drawtype = "nodebox",
drop = 'ma_pops_furniture:fan_off',
paramtype2 = "facedir",
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:fan_on"
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
node_box = {
type = "fixed",
fixed = {
{-0.5, 0.5, 0.2, 0.5, -0.5, -0.2},
},
}
})
minetest.register_node("ma_pops_furniture:ac", {
description = "AC",
tiles = {
"mp_ac_top.png",
"mp_ac_top.png",
"mp_ac_top.png",
"mp_ac_top.png",
"mp_ac_b.png",
"mp_ac_f.png",
},
drawtype = "nodebox",
paramtype = "light",
drop = 'ma_pops_furniture:ac',
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
node_box = {
type = "fixed",
fixed = {
{0.5, 0.5, 0.5, -0.5, -0.5, -0.4},
{0.5, 0.2, -0.5, -0.5, -0.5, -0.4},
},
}
})
-- Define a table for lamp colors
local lamp_table = {
{'Black', 'black', 'black:225'},
{'Blue', 'blue', 'blue:225'},
{'Brown', 'brown', 'brown:225'},
{'Cyan', 'cyan', 'cyan:200'},
{'Dark Green', 'dark_green', 'green:225'},
{'Dark Grey', 'dark_grey', 'black:200'},
{'Green', 'green', '#32cd32:150'},
{'Grey', 'grey', 'black:100'},
{'Magenta', 'magenta', 'magenta:200'},
{'Orange', 'orange', 'orange:225'},
{'Pink', 'pink', 'pink:225'},
{'Red', 'red', 'red:225'},
{'Violet', 'violet', 'violet:225'},
{'White', 'white', 'white:1'},
{'Yellow', 'yellow', 'yellow:225'}
}
-- Create a lookup table for dye names and corresponding lamp colors
local dye_to_color = {
['dye:black'] = 'black',
['dye:white'] = 'white',
['dye:grey'] = 'grey',
['dye:dark_grey'] = 'dark_grey',
['dye:violet'] = 'violet',
['dye:blue'] = 'blue',
['dye:cyan'] = 'cyan',
['dye:dark_green'] = 'dark_green',
['dye:green'] = 'green',
['dye:yellow'] = 'yellow',
['dye:orange'] = 'orange',
['dye:red'] = 'red',
['dye:magenta'] = 'magenta',
['dye:pink'] = 'pink',
['dye:brown'] = 'brown'
}
-- Register lamps for each color
for _, lamp in ipairs(lamp_table) do
local name = lamp[1]
local color = lamp[2]
local hex = lamp[3]
-- Register the "on" version of the lamp
minetest.register_node("ma_pops_furniture:lamp_"..color, {
description = name .. " Lamp",
tiles = {
"mp_lt.png",
"mp_lb_middle.png^[colorize:" .. hex .. "^mp_lb.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png"
},
drawtype = "nodebox",
light_source = 14,
paramtype = "facedir",
drop = 'ma_pops_furniture:lamp_off_'..color,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:lamp_off_"..color
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, not_in_creative_inventory = 1, furniture = 1},
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.4375, -0.25, 0.25, -0.0625, 0.25},
{-0.375, -0.0625, -0.375, 0.375, 0.5, 0.375},
{-0.1875, -0.4375, -0.1875, 0.1875, -0.5, 0.1875}
}
},
on_punch = function(pos, node, clicker)
local item = clicker:get_wielded_item():get_name()
local new_color = dye_to_color[item]
if new_color then
node.name = "ma_pops_furniture:lamp_" .. new_color
minetest.set_node(pos, node)
end
end
})
-- Register the "off" version of the lamp
minetest.register_node("ma_pops_furniture:lamp_off_"..color, {
description = name .. " Lamp",
tiles = {
"mp_lt.png",
"mp_lb_middle.png^[colorize:" .. hex .. "^mp_lb.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png",
"mp_ls.png^[colorize:" .. hex .. "^mp_ls_top.png"
},
drawtype = "nodebox",
paramtype = "facedir",
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:lamp_"..color
minetest.set_node(pos, node)
end,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, furniture = 1},
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.4375, -0.25, 0.25, -0.0625, 0.25},
{-0.375, -0.0625, -0.375, 0.375, 0.5, 0.375},
{-0.1875, -0.4375, -0.1875, 0.1875, -0.5, 0.1875}
}
},
on_punch = function(pos, node, clicker)
local item = clicker:get_wielded_item():get_name()
local new_color = dye_to_color[item]
if new_color then
node.name = "ma_pops_furniture:lamp_off_" .. new_color
minetest.set_node(pos, node)
end
end
})
end
local curtain_table = {
{'Black', 'black', 'black:225'},
{'Blue', 'blue', 'blue:225'},
{'Brown', 'brown', 'brown:225'},
{'Cyan', 'cyan', 'cyan:200'},
{'Dark Green', 'dark_green', 'green:225'},
{'Dark Grey', 'dark_grey', 'black:200'},
{'Green', 'green', '#32cd32:150'},
{'Grey', 'grey', 'black:100'},
{'Magenta', 'magenta', 'magenta:200'},
{'Orange', 'orange', 'orange:225'},
{'Pink', 'pink', 'pink:225'},
{'Red', 'red', 'red:225'},
{'Violet', 'violet', 'violet:225'},
{'White', 'white', 'white:1'},
{'Yellow', 'yellow', 'yellow:225'},
}
for i in ipairs(curtain_table) do
local name = curtain_table[i][1]
local color = curtain_table[i][2]
local hex = curtain_table[i][3]
-- Small Curtains
minetest.register_node("ma_pops_furniture:curtains_"..color, {
description = name.." Curtains",
tiles = {"default_acacia_tree.png","wool_"..color..".png^mp_curtainb.png","wool_"..color..".png^mp_curtains.png","wool_"..color..".png^mp_curtains.png","wool_"..color..".png^mp_curtains.png","wool_"..color..".png^mp_curtains.png"},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, furniture = 1},
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:curtains_closed_"..color
minetest.set_node(pos, node)
end,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.3, 0.5, -0.2, 0.5, 0.4},
{-0.5, -0.5, 0.5, -0.3, -0.3, 0.4},
{-0.5, 0.5, 0.5, 0.5, 0.2, 0.4},
{-0.5, 0.5, 0.5, 0.5, 0.440, 0.350},
{0.5, -0.3, 0.5, 0.2, 0.5, 0.4},
{0.5, -0.5, 0.5, 0.3, -0.3, 0.4},
},
},
on_punch = function(pos, node, clicker)
local item = clicker:get_wielded_item():get_name()
local color_map = {
["dye:black"] = "black",
["dye:white"] = "white",
["dye:grey"] = "grey",
["dye:dark_grey"] = "dark_grey",
["dye:violet"] = "violet",
["dye:blue"] = "blue",
["dye:cyan"] = "cyan",
["dye:dark_green"] = "dark_green",
["dye:green"] = "green",
["dye:yellow"] = "yellow",
["dye:orange"] = "orange",
["dye:red"] = "red",
["dye:magenta"] = "magenta",
["dye:pink"] = "pink",
["dye:brown"] = "brown",
}
local new_color = color_map[item]
if new_color then
node.name = "ma_pops_furniture:curtains_"..new_color
minetest.set_node(pos, node)
end
end,
})
-- Closed Small Curtains
minetest.register_node("ma_pops_furniture:curtains_closed_"..color, {
description = name.." Closed Curtains",
tiles = {"default_acacia_tree.png","wool_"..color..".png^mp_curtainb.png","wool_"..color..".png^mp_curtains.png","wool_"..color..".png^mp_curtains.png","wool_"..color..".png^mp_curtains.png","wool_"..color..".png^mp_curtains.png"},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, not_in_creative_inventory = 1, furniture = 1},
drop = "ma_pops_furniture:curtains_"..color,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:curtains_"..color
minetest.set_node(pos, node)
end,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.5, 0.5, 0.5, 0.4},
{-0.5, 0.5, 0.5, 0.5, 0.440, 0.350},
},
},
on_punch = function(pos, node, clicker)
local item = clicker:get_wielded_item():get_name()
local color_map = {
["dye:black"] = "black",
["dye:white"] = "white",
["dye:grey"] = "grey",
["dye:dark_grey"] = "dark_grey",
["dye:violet"] = "violet",
["dye:blue"] = "blue",
["dye:cyan"] = "cyan",
["dye:dark_green"] = "dark_green",
["dye:green"] = "green",
["dye:yellow"] = "yellow",
["dye:orange"] = "orange",
["dye:red"] = "red",
["dye:magenta"] = "magenta",
["dye:pink"] = "pink",
["dye:brown"] = "brown",
}
local new_color = color_map[item]
if new_color then
node.name = "ma_pops_furniture:curtains_closed_"..new_color
minetest.set_node(pos, node)
end
end,
})
-- Tall Curtains
minetest.register_node("ma_pops_furniture:curtains_2_tall_"..color, {
description = name.." Tall Curtains",
tiles = {"wool_"..color..".png"},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, furniture = 1},
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:curtains_2_tall_closed_"..color
minetest.set_node(pos, node)
end,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.3, 0.5, -0.2, 0.5, 0.4},
{-0.5, -0.5, 0.5, -0.3, -0.3, 0.4},
{-0.5, 0.5, 0.5, 0.5, 0.2, 0.4},
{0.5, -0.3, 0.5, 0.2, 0.5, 0.4},
{0.5, -0.5, 0.5, 0.3, -0.3, 0.4},
{-0.5, -0.5, 0.5, -0.3, -1.2, 0.4},
{0.5, -0.5, 0.5, 0.3, -1.2, 0.4},
},
},
on_punch = function(pos, node, clicker)
local item = clicker:get_wielded_item():get_name()
local color_map = {
["dye:black"] = "black",
["dye:white"] = "white",
["dye:grey"] = "grey",
["dye:dark_grey"] = "dark_grey",
["dye:violet"] = "violet",
["dye:blue"] = "blue",
["dye:cyan"] = "cyan",
["dye:dark_green"] = "dark_green",
["dye:green"] = "green",
["dye:yellow"] = "yellow",
["dye:orange"] = "orange",
["dye:red"] = "red",
["dye:magenta"] = "magenta",
["dye:pink"] = "pink",
["dye:brown"] = "brown",
}
local new_color = color_map[item]
if new_color then
node.name = "ma_pops_furniture:curtains_2_tall_"..new_color
minetest.set_node(pos, node)
end
end,
})
-- Closed Tall Curtains
minetest.register_node("ma_pops_furniture:curtains_2_tall_closed_"..color, {
description = name.." Closed Tall Curtains",
tiles = {"wool_"..color..".png"},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, not_in_creative_inventory = 1, furniture = 1},
drop = "ma_pops_furniture:curtains_2_tall_"..color,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:curtains_2_tall_"..color
minetest.set_node(pos, node)
end,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.5, 0.5, 0.5, 0.4},
{-0.5, -1.2, 0.5, 0.5, -0.5, 0.4},
},
},
})
end
-- On placement check if there is a small curtain directly below
minetest.register_on_placenode(function(pos, new_node, placer, itemstack, pointed_thing)
if new_node.name:match("ma_pops_furniture:curtains_") then
local node_below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
if node_below.name:match("ma_pops_furniture:curtains_") and node_below.name ~= new_node.name then
local color = new_node.name:match("_(%w+)$")
local tall_node_name = "ma_pops_furniture:curtains_2_tall_"..color
minetest.set_node(pos, {name = tall_node_name})
minetest.set_node({x=pos.x, y=pos.y-1, z=pos.z}, {name = "air"})
end
end
end)
minetest.register_node("ma_pops_furniture:computer", {
description = "Computer",
tiles = {
"mp_s.png^mp_top.png",
"mp_s.png",
"mp_s.png",
"mp_s.png",
"mp_s.png",
"mp_s.png^mp_f.png"
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {snappy=2, oddly_breakable_by_hand=2, furniture=1, flammable=1},
sounds = moditems.WOOD_SOUNDS,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.1875, 0.5, -0.25, 0.5},
{-0.5, -0.5, -0.5, 0.1875, -0.375, -0.25},
{0.25, -0.5, -0.5, 0.4375, -0.375, -0.25},
{-0.125, -0.25, 0.0625, 0.125, -0.0625, 0.25},
{-0.3125, -0.125, -0.25, 0.3125, 0.5, 0.3125},
{-0.25, 0, 0.3125, 0.25, 0.375, 0.5},
}
}
})
-- Define the stool color table
local stool_table = {
{'Black', 'black', 'black:225'},
{'Blue', 'blue', 'blue:150'},
{'Brown', 'brown', 'brown:100'},
{'Cyan', 'cyan', 'cyan:150'},
{'Dark Green', 'dark_green', 'green:200'},
{'Green', 'green', '#32cd32:150'},
{'Magenta', 'magenta', 'magenta:200'},
{'Orange', 'orange', 'orange:150'},
{'Pink', 'pink', 'pink:150'},
{'Red', 'red', 'red:150'},
{'Violet', 'violet', 'violet:150'},
{'White', 'white', 'white:150'},
{'Yellow', 'yellow', 'yellow:150'}
}
-- Create a lookup table for dye names and corresponding stool colors
local dye_to_stool = {
['dye:black'] = 'black',
['dye:white'] = 'white',
['dye:grey'] = 'grey',
['dye:dark_grey'] = 'dark_grey',
['dye:violet'] = 'violet',
['dye:blue'] = 'blue',
['dye:cyan'] = 'cyan',
['dye:dark_green'] = 'dark_green',
['dye:green'] = 'green',
['dye:yellow'] = 'yellow',
['dye:orange'] = 'orange',
['dye:red'] = 'red',
['dye:magenta'] = 'magenta',
['dye:pink'] = 'pink',
['dye:brown'] = 'brown'
}
-- Register each stool color
for _, stool in ipairs(stool_table) do
local name = stool[1]
local color = stool[2]
local hex = stool[3]
minetest.register_node("ma_pops_furniture:stool_"..color, {
description = name.." Stool",
tiles = {
"mp_stool_top1.png^mp_stool_top.png^[colorize:"..hex.."^mp_stool_top1.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png"
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, furniture = 1},
can_dig = ma_pops_furniture.sit_dig,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
pos.y = pos.y + 0 -- Sitting position
ma_pops_furniture.sit(pos, node, clicker, pointed_thing)
return itemstack
end,
node_box = {
type = "fixed",
fixed = {
{-0.375, -0.5, -0.375, -0.1875, 0.375, -0.1875},
{-0.375, -0.5, 0.1875, -0.1875, 0.375, 0.375},
{0.1875, -0.5, 0.1875, 0.375, 0.375, 0.375},
{0.1875, -0.5, -0.375, 0.375, 0.375, -0.1875},
{-0.375, 0.1875, -0.375, 0.375, 0.375, 0.375},
{0.25, -0.375, -0.1875, 0.3125, -0.3125, 0.1875},
{-0.1875, -0.375, -0.3125, 0.1875, -0.3125, -0.25},
{-0.1875, -0.375, 0.25, 0.1875, -0.3125, 0.3125},
{-0.3125, -0.375, -0.1875, -0.25, -0.3125, 0.1875},
{-0.3125, 0.375, -0.3125, 0.3125, 0.4375, 0.3125}
}
},
on_punch = function(pos, node, clicker)
local item = clicker:get_wielded_item():get_name()
local new_color = dye_to_stool[item]
if new_color then
node.name = "ma_pops_furniture:stool_"..new_color
minetest.set_node(pos, node)
else
ma_pops_furniture.sit(pos, node, clicker)
end
end
})
end
minetest.register_node("ma_pops_furniture:stairs", {
description= "Stairs",
tiles = {
"default_coral_skeleton.png",
"default_coral_skeleton.png",
"default_coral_skeleton.png^mp_stairs_side.png",
"default_coral_skeleton.png^mp_stairs_side.png^[transformFX",
"default_coral_skeleton.png^mp_stairs_back.png",
"default_coral_skeleton.png^mp_stairs_front.png"
},
drawtype = "mesh",
mesh= "stairs.obj",
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky = 3, oddly_breakable_by_hand = 3},
node_box = {
type = "fixed",
fixed = {
{-0.5, 0.375, 0, 0.5, 0.5, 0.5}, -- NodeBox18
{-0.5, -0.125, -0.5, 0.5, 0, 0}, -- NodeBox19
{-0.0625, -0.375, -0.3125, 0.0625, -0.125, -0.1875}, -- NodeBox20
{-0.0625, -0.25, 0.1875, 0.0625, 0.375, 0.3125}, -- NodeBox21
{-0.0625, -0.375, -0.1875, 0.0625, -0.25, 0.3125}, -- NodeBox23
{-0.0625, -0.25, 0.0625, 0.0625, -0.125, 0.1875}, -- NodeBox24
}
}
})
-- Register the base lamp
minetest.register_node("ma_pops_furniture:lamp_1", {
description = "Floor Lamp",
tiles = {
"default_stone.png",
"default_stone.png",
"default_stone.png",
"default_stone.png",
"default_stone.png",
"default_stone.png"
},
groups = {cracky=2, oddly_breakable_by_hand=3},
on_construct = function(pos)
if minetest.get_node(vector.add(pos, vector.new(0, 1, 0))).name == "air" then
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "ma_pops_furniture:lamp_2_off"})
end
if minetest.get_node(vector.add(pos, vector.new(0, 1, 0))).name ~= "air" and
minetest.get_node(vector.add(pos, vector.new(0, 1, 0))).name ~= "ma_pops_furniture:lamp_2_off" then
minetest.set_node({x = pos.x, y = pos.y, z = pos.z},{name = "air"})
end
end,
on_dig = function(pos, node, player)
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "air"})
minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "air"})
end,
drawtype = "nodebox",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.5, -0.25, 0.25, -0.375, 0.25}, -- NodeBox16
{-0.0625, -0.375, -0.0625, 0.0625, 0.5, 0.0625} -- NodeBox17
}
}
})
-- Register the "on" version of the lamp
minetest.register_node("ma_pops_furniture:lamp_2_on", {
description = "Floor Lamp 2",
tiles = {
"mp_lt.png",
"mp_lt.png",
"default_stone.png^mp_ls_top.png",
"default_stone.png^mp_ls_top.png",
"default_stone.png^mp_ls_top.png",
"default_stone.png^mp_ls_top.png"
},
groups = {cracky=2, oddly_breakable_by_hand=3, not_in_creative_inventory = 1},
drop = "test:node_1",
on_dig = function(pos, node, player)
minetest.set_node({x = pos.x, y = pos.y - 1, z = pos.z}, {name = "air"})
minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "air"})
end,
drawtype = "nodebox",
paramtype = "light",
light_source = 14,
drop = 'ma_pops_furniture:lamp_2_off',
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:lamp_2_off"
minetest.set_node(pos, node)
end,
node_box = {
type = "fixed",
fixed = {
{-0.375, -0.0625, -0.375, 0.375, 0.5, 0.375}, -- NodeBox16
{-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625} -- NodeBox17
}
},
})
-- Register the "off" version of the lamp
minetest.register_node("ma_pops_furniture:lamp_2_off", {
description = "Floor Lamp 2",
tiles = {
"mp_lt.png",
"mp_lt.png",
"default_stone.png^mp_ls_top.png",
"default_stone.png^mp_ls_top.png",
"default_stone.png^mp_ls_top.png",
"default_stone.png^mp_ls_top.png"
},
groups = {cracky=2, oddly_breakable_by_hand=3, not_in_creative_inventory = 1},
drop = "test:node_1",
on_dig = function(pos, node, player)
minetest.set_node({x = pos.x, y = pos.y - 1, z = pos.z}, {name = "air"})
minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "air"})
end,
drawtype = "nodebox",
paramtype = "light",
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
node.name = "ma_pops_furniture:lamp_2_on"
minetest.set_node(pos, node)
end,
node_box = {
type = "fixed",
fixed = {
{-0.375, -0.0625, -0.375, 0.375, 0.5, 0.375}, -- NodeBox16
{-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625} -- NodeBox17
}
},
on_punch = function(pos, node, clicker)
change_lamp_color(pos, node, clicker)
end
})