summaryrefslogtreecommitdiff
path: root/moreblocks/stairsplus/common.lua
blob: 7b86faddeab869f07264e6ddce66bf9e704a8d17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
--[[
More Blocks: registrations

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

local S = moreblocks.S


stairsplus.register_single = function(category, alternate, info, modname, subname, recipeitem, fields)
	local descriptions = {
		["micro"] = S("Microblock"),
		["slab"] = S("Slab"),
		["slope"] = S("Slope"),
		["panel"] = S("Panel"),
		["stair"] = S("Stairs"),
	}
	local def = {}
	if category ~= "slab" then
		def = table.copy(info)
	end

	for k, v in pairs(fields) do
		def[k] = v
	end
	def.drawtype = "nodebox"
	if category == "slope" then
		def.drawtype = "mesh"
	end
	def.paramtype = "light"
	def.paramtype2 = def.paramtype2 or "facedir"

	-- This makes node rotation work on placement
	def.place_param2 = nil

	def.on_place = minetest.rotate_node
	if category ~= "slab" then
		def.description = S("%s " .. descriptions[category]):format(fields.description)
	else
		local desc_base = S("%s " .. descriptions[category]):format(fields.description)
		if type(info) ~= "table" then
			def.node_box = {
				type = "fixed",
				fixed = {-0.5, -0.5, -0.5, 0.5, (info/16)-0.5, 0.5},
			}
			def.description = ("%s (%d/16)"):format(desc_base, info)
		else
			def.node_box = {
				type = "fixed",
				fixed = info,
			}
			def.description = desc_base .. alternate:gsub("_", " "):gsub("(%a)(%S*)", function(a, b) return a:upper() .. b end)
		end
	end
	def.groups = stairsplus:prepare_groups(fields.groups)
	if category == "stair" and alternate == "" then
		def.groups.stair = 1
	end
	if fields.drop and not (type(fields.drop) == "table") then
		def.drop = modname.. ":" .. category .. "_" .. fields.drop .. alternate
	end
	minetest.register_node(":" ..modname.. ":" .. category .. "_" .. subname .. alternate, def)
	stairsplus.register_recipes(category, alternate, modname, subname, recipeitem)
end