carpets/carpet_api.lua

81 lines
2.0 KiB
Lua
Raw Normal View History

2016-09-04 17:09:25 +02:00
carpet = {}
local config = Settings(minetest.get_modpath("carpets").."/settings.txt")
local carpet_proto = {
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}
},
}
if config:get_bool("WoolFeeling") then
local wool = minetest.registered_nodes["wool:white"]
carpet_proto.sounds = wool.sounds
carpet_proto.groups = wool.groups
end
function carpet.register(recipe, def)
local node = {}
if def then
for k, v in pairs(def) do
node[k] = v
end
end
for k, v in pairs(carpet_proto) do
node[k] = v
end
local recipe_def = minetest.registered_nodes[recipe]
node.description = node.description or recipe_def.description.." Carpet"
node.tiles = node.tiles or recipe_def.tiles
if node.tiles[6] then -- prefer "front" site for carpet
node.tiles = {node.tiles[6]}
end
2016-09-04 17:09:25 +02:00
node.sounds = node.sounds or recipe_def.sounds
node.groups = node.groups or recipe_def.groups or {}
node.groups.leafdecay = nil
if config:get_bool("FallingCarpet") and node.groups.falling_node == nil then
node.groups.falling_node = 1
elseif node.groups.falling_node == 1 then
node.groups.falling_node = 0
end
local name = "carpet:"..(node.name or recipe:gsub(":", "_"))
node.name = nil
if config:get_bool("NoFlyCarpet") then
local previous_on_place = node.on_place or minetest.item_place
node.on_place = function(itemstack, placer, pointed_thing, ...)
if not pointed_thing then return end
local above = pointed_thing.above
local under = pointed_thing.under
local under_node = minetest.get_node(under)
if above.y == under.y + 1 and under_node.name == name then
return
end
return previous_on_place(itemstack, placer, pointed_thing, ...)
end
end
minetest.register_node(":"..name, node)
minetest.register_craft({
output = name.." 32",
recipe = {{"group:wool", "group:wool", "group:wool"},
{"group:wool", recipe, "group:wool"}}
})
end