This repository has been archived on 2023-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
mcl_decor/api.lua

329 lines
9.1 KiB
Lua
Raw Normal View History

2022-02-22 10:30:42 +01:00
-- mcl_decor/api.lua
local S = minetest.get_translator(minetest.get_current_modname())
-- originally from the ts_furniture mod (which is from cozy) by Thomas--S // https://github.com/minetest-mods/ts_furniture/
mcl_decor.sit = function(pos, _, player)
local name = player:get_player_name()
if not mcl_player.player_attached[name] then
if vector.length(player:get_player_velocity()) > 0 then
minetest.chat_send_player(player:get_player_name(), S("You have to stop moving before sitting down!"))
return
end
player:move_to(pos)
player:set_eye_offset({x = 0, y = -7, z = 0}, {x = 0, y = 0, z = 0})
player:set_physics_override(0, 0, 0)
mcl_player.player_attached[name] = true
minetest.after(0.1, function()
if player then
mcl_player.player_set_animation(player, "sit" , 30)
end
end)
else
mcl_decor.stand(player, name)
end
end
mcl_decor.up = function(_, _, player)
local name = player:get_player_name()
if mcl_player.player_attached[name] then
mcl_decor.stand(player, name)
end
end
mcl_decor.stand = function(player, name)
player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
player:set_physics_override(1, 1, 1)
mcl_player.player_attached[name] = false
mcl_player.player_set_animation(player, "stand", 30)
end
if not minetest.get_modpath("mcl_cozy") then
minetest.register_globalstep(function(dtime)
local players = minetest.get_connected_players()
for i = 1, #players do
local player = players[i]
local name = player:get_player_name()
local ctrl = player:get_player_control()
if mcl_player.player_attached[name] and not player:get_attach() and
(ctrl.up or ctrl.down or ctrl.left or ctrl.right or ctrl.jump or ctrl.sneak) then
mcl_decor.up(nil, nil, player)
end
end
end)
end
function mcl_decor.register_path(name, desc, material, tiles, sgroup, sounds)
minetest.register_node(name, {
description = desc,
tiles = {tiles},
wield_image = "mcl_decor_path_alpha.png^"..tiles.."^" ..
"mcl_decor_path_alpha.png^[makealpha:255,126,126",
inventory_image = "mcl_decor_path_alpha.png^"..tiles.."^" ..
"mcl_decor_path_alpha.png^[makealpha:255,126,126",
groups = {handy=1, [sgroup]=1, attached_node=1, dig_by_piston=1, deco_block=1},
drawtype = "nodebox",
paramtype = "light",
sunlight_propagates = true,
buildable_to = true,
walkable = true,
node_box = {
type = "fixed",
fixed = {
{-0.4375, -0.5, -0.4375, -0.125, -0.4375, -0.125},
{-0.125, -0.5, -0.0625, 0.0625, -0.4375, 0.125},
{-0.3125, -0.5, 0.1875, -0.0625, -0.4375, 0.4375},
{0.0625, -0.5, -0.375, 0.25, -0.4375, -0.1875},
{0.125, -0.5, 0.125, 0.375, -0.4375, 0.375},
{0.25, -0.5, -0.125, 0.375, -0.4375, 0},
{-0.4375, -0.5, 0, -0.3125, -0.4375, 0.125},
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
}
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
}
},
_mcl_blast_resistance = 0.3,
_mcl_hardness = 0.3,
sounds = sounds
})
minetest.register_craft({
output = name.." 16",
recipe = {
{material, "", material},
{"", material, ""},
{material, "", material}
}
})
end
function mcl_decor.register_chair_and_table(name, desc, name2, desc2, material, tiles)
-- chair part
2022-02-22 10:30:42 +01:00
minetest.register_node(name, {
description = desc,
2022-02-22 10:30:42 +01:00
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.25, 0, 0.125, 0.25, 0.5, 0.25}, -- back
{-0.25, -0.125, -0.25, 0.25, 0, 0.25}, -- seat
{-0.25, -0.5, 0.125, -0.125, -0.125, 0.25}, -- 1st leg
{0.125, -0.5, -0.25, 0.25, -0.125, -0.125}, -- 2nd leg
{0.125, -0.5, 0.125, 0.25, -0.125, 0.25}, -- 3rd leg
{-0.25, -0.5, -0.25, -0.125, -0.125, -0.125}, -- 4th leg
}
},
tiles = {tiles},
2022-02-22 10:30:42 +01:00
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
stack_max = 64,
sunlight_propagates = true,
selection_box = {
type = "fixed",
fixed = { -0.25, -0.5, -0.25, 0.25, 0.5, 0.25 },
},
groups = {handy=1, axey=1, attached_node=1, material_wood=1, deco_block=1, flammable=-1},
_mcl_hardness = 1,
_mcl_blast_resistance = 1,
sounds = mcl_sounds.node_sound_wood_defaults(),
on_rightclick = mcl_decor.sit
2022-02-22 10:30:42 +01:00
})
minetest.register_craft({
output = name,
recipe = {
{"", "", "mcl_core:stick"},
{material, material, material},
{"mcl_core:stick", "", "mcl_core:stick"}
}
})
minetest.register_craft({
output = name,
recipe = {
{"mcl_core:stick", "", ""},
{material, material, material},
{"mcl_core:stick", "", "mcl_core:stick"}
}
})
minetest.register_craft({
type = "fuel",
recipe = name,
burntime = 8,
})
-- table part
minetest.register_node(name2, {
description = desc2,
2022-02-22 10:30:42 +01:00
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{ -0.5, 0.375, -0.5, 0.5, 0.5, 0.5 }, -- top
{ -0.4375, -0.5, -0.4375, -0.3125, 0.375, -0.3125 }, -- 1st leg
{ 0.3125, -0.5, -0.4375, 0.4375, 0.375, -0.3125 }, -- 2nd leg
{ 0.3125, -0.5, 0.3125, 0.4375, 0.375, 0.4375 }, -- 3rd leg
{ -0.4375, -0.5, 0.3125, -0.3125, 0.375, 0.4375 }, -- 4th leg
}
},
selection_box = {
type = "fixed",
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
2022-02-22 10:30:42 +01:00
},
tiles = {tiles},
2022-02-22 10:30:42 +01:00
is_ground_content = false,
paramtype = "light",
stack_max = 64,
sunlight_propagates = true,
groups = {handy=1, axey=1, attached_node=1, material_wood=1, deco_block=1, flammable=-1},
_mcl_hardness = 2,
_mcl_blast_resistance = 3,
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = name2.." 2",
recipe = {
{material, material, material},
{"mcl_core:stick", "", "mcl_core:stick"},
{"mcl_core:stick", "", "mcl_core:stick"}
}
})
minetest.register_craft({
type = "fuel",
recipe = name2,
burntime = 10,
})
end
function mcl_decor.register_slab_table(name, desc, material, tiles)
minetest.register_node(name, {
description = desc,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.125, -0.5, -0.125, 0.125, 0, 0.125},
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
}
},
--[[
selection_box = {
type = "fixed",
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
},
]]
tiles = {tiles},
is_ground_content = false,
paramtype = "light",
stack_max = 64,
sunlight_propagates = true,
groups = {handy=1, axey=1, attached_node=1, material_wood=1, deco_block=1, flammable=-1},
_mcl_hardness = 2,
_mcl_blast_resistance = 3,
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = name.." 3",
recipe = {
{material, material, material},
{"", "mcl_core:stick", ""},
{"", "mcl_core:stick", ""}
}
})
minetest.register_craft({
type = "fuel",
recipe = name,
burntime = 10,
2022-02-22 10:30:42 +01:00
})
end
function mcl_decor.register_armchair(name, desc, material, tiles, dye, colorgroup)
minetest.register_node(name, {
description = desc,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.4375, -0.5, -0.5, 0.4375, -0.0625, 0.1875},
{-0.5, -0.4375, -0.5, -0.3125, 0.125, 0.1875},
{0.3125, -0.4375, -0.5, 0.5, 0.125, 0.1875},
{-0.5, -0.5, 0.1875, 0.5, 0.5, 0.5},
{-0.5, -0.5, -0.4375, 0.5, -0.4375, 0.5},
}
},
tiles = {tiles},
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
stack_max = 64,
selection_box = {
type = "fixed",
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
},
groups = {handy=1, shearsy_wool=1, attached_node=1, deco_block=1, armchair=1, flammable=1, fire_encouragement=30, fire_flammability=60, [colorgroup]=1},
_mcl_hardness = 1,
_mcl_blast_resistance = 1,
sounds = mcl_sounds.node_sound_wood_defaults(),
on_rightclick = mcl_decor.sit
})
minetest.register_craft({
output = name,
recipe = {
{"", "", material},
{material, material, material},
{"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}
}
})
minetest.register_craft({
output = name,
recipe = {
{material, "", ""},
{material, material, material},
{"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}
}
})
minetest.register_craft({
type = "shapeless",
output = name,
recipe = {"group:armchair", "mcl_dye:" .. dye},
})
minetest.register_craft({
type = "fuel",
recipe = name,
burntime = 10,
})
end
function mcl_decor.register_dyed_planks(name, desc, hexcolor, dye, colorgroup)
minetest.register_node("mcl_decor:"..name, {
description = desc,
tiles = {"mcl_decor_dyed_planks.png^[colorize:" .. hexcolor .. ":125"},
stack_max = 64,
is_ground_content = false,
groups = {handy=1, axey=1, flammable=3, wood=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20, [colorgroup]=1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 3,
_mcl_hardness = 2,
})
minetest.register_craft({
type = "shapeless",
output = "mcl_decor:"..name,
recipe = {"group:wood", "mcl_dye:" .. dye}
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_decor:"..name,
burntime = 12,
})
-- maybe descriptions of slabs/stairs after that workaround will be VERY CRAPPY (especially with translations via locales), but at least it works
mcl_stairs.register_stair_and_slab_simple(name, "mcl_decor:"..name, desc..S(" Stair"), desc..S(" Slab"), S("Double")..desc..S(" Slab"))
end