init.lua 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. local S = minetest.get_translator("homedecor_roofing")
  2. homedecor_roofing = {}
  3. minetest.register_node(":homedecor:skylight", {
  4. description = S("Glass Skylight"),
  5. drawtype = "raillike",
  6. tiles = { "default_glass.png" },
  7. wield_image = "default_glass.png",
  8. inventory_image = "homedecor_skylight_inv.png",
  9. groups = { snappy = 3 },
  10. paramtype = "light",
  11. sounds = default.node_sound_glass_defaults(),
  12. selection_box = homedecor.nodebox.slab_y(0.1),
  13. })
  14. minetest.register_node(":homedecor:skylight_frosted", {
  15. description = S("Glass Skylight Frosted"),
  16. drawtype = "raillike",
  17. tiles = { "homedecor_skylight_frosted.png" },
  18. wield_image = "homedecor_skylight_frosted.png",
  19. inventory_image = "homedecor_skylight_frosted_inv.png",
  20. use_texture_alpha = true,
  21. groups = { snappy = 3 },
  22. paramtype = "light",
  23. sounds = default.node_sound_glass_defaults(),
  24. selection_box = homedecor.nodebox.slab_y(0.1),
  25. })
  26. for s, s_loc in pairs({ ["asphalt"] = S("asphalt"), ["terracotta"] = S("terracotta"), ["wood"] = S("wood") }) do
  27. minetest.register_node(":homedecor:shingles_"..s, {
  28. description = S("Shingles (@1)", s_loc),
  29. drawtype = "raillike",
  30. tiles = { "homedecor_shingles_"..s..".png" },
  31. wield_image = "homedecor_shingles_"..s..".png",
  32. inventory_image = "homedecor_shingles_"..s.."_inv.png",
  33. paramtype = "light",
  34. walkable = false,
  35. groups = { snappy = 3 },
  36. sounds = default.node_sound_wood_defaults(),
  37. selection_box = homedecor.nodebox.slab_y(0.1),
  38. })
  39. end
  40. local slope_cbox = {
  41. type = "fixed",
  42. fixed = {
  43. {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
  44. {-0.5, -0.25, -0.25, 0.5, 0, 0.5},
  45. {-0.5, 0, 0, 0.5, 0.25, 0.5},
  46. {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
  47. }
  48. }
  49. local ocorner_cbox = {
  50. type = "fixed",
  51. fixed = {
  52. {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
  53. {-0.5, -0.25, -0.25, 0.25, 0, 0.5},
  54. {-0.5, 0, 0, 0, 0.25, 0.5},
  55. {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5}
  56. }
  57. }
  58. local icorner_cbox = {
  59. type = "fixed",
  60. fixed = {
  61. {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, -- NodeBox5
  62. {-0.5, -0.5, -0.25, 0.5, 0, 0.5}, -- NodeBox6
  63. {-0.5, -0.5, -0.5, 0.25, 0, 0.5}, -- NodeBox7
  64. {-0.5, 0, -0.5, 0, 0.25, 0.5}, -- NodeBox8
  65. {-0.5, 0, 0, 0.5, 0.25, 0.5}, -- NodeBox9
  66. {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}, -- NodeBox10
  67. {-0.5, 0.25, -0.5, -0.25, 0.5, 0.5}, -- NodeBox11
  68. }
  69. }
  70. homedecor_roofing.register_outer_corner = function(modname, subname, groups, slope_image, description)
  71. local tiles = slope_image
  72. if type(slope_image) ~= "table" then
  73. tiles = { "homedecor_slope_outer_corner_"..slope_image..".png" }
  74. end
  75. minetest.register_node(":"..modname..":shingle_outer_corner_" .. subname, {
  76. description = S("@1 (outer corner)", description),
  77. drawtype = "mesh",
  78. mesh = "homedecor_slope_outer_corner.obj",
  79. tiles = tiles,
  80. paramtype = "light",
  81. paramtype2 = "facedir",
  82. selection_box = ocorner_cbox,
  83. collision_box = ocorner_cbox,
  84. groups = groups,
  85. on_place = minetest.rotate_node,
  86. sounds = default.node_sound_wood_defaults()
  87. })
  88. end
  89. homedecor_roofing.register_inner_corner = function(modname, subname, groups, slope_image, description)
  90. local tiles = slope_image
  91. if type(slope_image) ~= "table" then
  92. tiles = { "homedecor_slope_outer_corner_"..slope_image..".png" }
  93. end
  94. minetest.register_node(":"..modname..":shingle_inner_corner_" .. subname, {
  95. description = S("@1 (inner corner)", description),
  96. drawtype = "mesh",
  97. mesh = "homedecor_slope_inner_corner.obj",
  98. tiles = tiles,
  99. paramtype = "light",
  100. paramtype2 = "facedir",
  101. collision_box = icorner_cbox,
  102. groups = groups,
  103. on_place = minetest.rotate_node,
  104. sounds = default.node_sound_wood_defaults()
  105. })
  106. end
  107. homedecor_roofing.register_slope = function(modname, subname, recipeitem, groups, slope_image, description)
  108. local tiles = slope_image
  109. if type(slope_image) ~= "table" then
  110. tiles = { "homedecor_slope_outer_corner_"..slope_image..".png" }
  111. end
  112. minetest.register_node(":"..modname..":shingle_side_" .. subname, {
  113. description = description,
  114. drawtype = "mesh",
  115. mesh = "homedecor_slope.obj",
  116. tiles = tiles,
  117. paramtype = "light",
  118. paramtype2 = "facedir",
  119. selection_box = slope_cbox,
  120. collision_box = slope_cbox,
  121. groups = groups,
  122. on_place = minetest.rotate_node,
  123. sounds = default.node_sound_wood_defaults()
  124. })
  125. -- convert between flat shingles and slopes
  126. minetest.register_craft({
  127. output = modname..":shingle_side_"..subname.." 3",
  128. recipe = {
  129. {recipeitem, recipeitem, recipeitem}
  130. }
  131. })
  132. minetest.register_craft({
  133. output = recipeitem.." 3",
  134. recipe = {
  135. {modname..":shingle_side_"..subname, modname..":shingle_side_"..subname, modname..":shingle_side_"..subname},
  136. }
  137. })
  138. -- craft outer corners
  139. minetest.register_craft({
  140. output = modname..":shingle_outer_corner_"..subname.." 3",
  141. recipe = {
  142. { "", recipeitem, "" },
  143. { recipeitem, "", recipeitem }
  144. }
  145. })
  146. minetest.register_craft({
  147. output = modname..":shingle_outer_corner_"..subname.." 3",
  148. recipe = {
  149. { "", modname..":shingle_side_"..subname, "" },
  150. { modname..":shingle_side_"..subname, "", modname..":shingle_side_"..subname },
  151. }
  152. })
  153. -- craft inner corners
  154. minetest.register_craft({
  155. output = modname..":shingle_inner_corner_"..subname.." 3",
  156. recipe = {
  157. {recipeitem, recipeitem},
  158. {"", recipeitem}
  159. }
  160. })
  161. minetest.register_craft({
  162. output = modname..":shingle_inner_corner_"..subname.." 3",
  163. recipe = {
  164. {modname..":shingle_side_"..subname, modname..":shingle_side_"..subname},
  165. {"", modname..":shingle_side_"..subname}
  166. }
  167. })
  168. -- convert between flat shingles and inner/outer corners
  169. minetest.register_craft({
  170. type = "shapeless",
  171. output = recipeitem.." 1",
  172. recipe = { modname..":shingle_outer_corner_"..subname }
  173. })
  174. minetest.register_craft({
  175. type = "shapeless",
  176. output = recipeitem.." 1",
  177. recipe = { modname..":shingle_inner_corner_"..subname }
  178. })
  179. end
  180. minetest.register_craft( {
  181. output = "homedecor:shingle_side_glass",
  182. recipe = {
  183. { "homedecor:skylight", "homedecor:skylight", "homedecor:skylight" }
  184. }
  185. })
  186. minetest.register_craft( {
  187. output = "homedecor:roof_tile_terracotta 8",
  188. recipe = {
  189. { "homedecor:shingle_outer_corner_terracotta", "homedecor:shingle_outer_corner_terracotta" }
  190. }
  191. })
  192. minetest.register_craft( {
  193. output = "homedecor:roof_tile_terracotta 8",
  194. recipe = {
  195. { "homedecor:shingle_inner_corner_terracotta", "homedecor:shingle_inner_corner_terracotta" }
  196. }
  197. })
  198. minetest.register_craft( {
  199. output = "homedecor:roof_tile_terracotta 8",
  200. recipe = {
  201. { "homedecor:shingle_side_terracotta", "homedecor:shingle_side_terracotta" }
  202. }
  203. })
  204. minetest.register_craft({
  205. type = "fuel",
  206. recipe = "homedecor:shingle_inner_corner_wood",
  207. burntime = 30,
  208. })
  209. minetest.register_craft({
  210. type = "fuel",
  211. recipe = "homedecor:shingle_outer_corner_wood",
  212. burntime = 30,
  213. })
  214. minetest.register_craft({
  215. type = "fuel",
  216. recipe = "homedecor:shingle_side_wood",
  217. burntime = 30,
  218. })
  219. homedecor_roofing.register_roof = function(modname, subname, groups, slope_image , description)
  220. homedecor_roofing.register_outer_corner(modname, subname, groups, slope_image, description)
  221. homedecor_roofing.register_inner_corner(modname, subname, groups, slope_image, description)
  222. end
  223. -- corners
  224. homedecor_roofing.register_roof("homedecor", "wood",
  225. { snappy = 3 },
  226. { "homedecor_shingles_wood.png" },
  227. S("Wood Shingles")
  228. )
  229. homedecor_roofing.register_roof("homedecor", "asphalt",
  230. { snappy = 3 },
  231. { "homedecor_shingles_asphalt.png" },
  232. S("Asphalt Shingles")
  233. )
  234. homedecor_roofing.register_roof("homedecor", "terracotta",
  235. { snappy = 3 },
  236. { "homedecor_shingles_terracotta.png" },
  237. S("Terracotta Shingles")
  238. )
  239. -- register just the slopes
  240. homedecor_roofing.register_slope("homedecor", "wood",
  241. "homedecor:shingles_wood",
  242. { snappy = 3 },
  243. { "homedecor_shingles_wood.png" },
  244. S("Wood Shingles")
  245. )
  246. homedecor_roofing.register_slope("homedecor", "asphalt",
  247. "homedecor:shingles_asphalt",
  248. { snappy = 3 },
  249. { "homedecor_shingles_asphalt.png" },
  250. S("Asphalt Shingles")
  251. )
  252. homedecor_roofing.register_slope("homedecor", "terracotta",
  253. "homedecor:shingles_terracotta",
  254. { snappy = 3 },
  255. { "homedecor_shingles_terracotta.png" },
  256. S("Terracotta Shingles")
  257. )
  258. homedecor_roofing.register_slope("homedecor", "glass",
  259. "homedecor:shingles_glass",
  260. { snappy = 3 },
  261. { "homedecor_shingles_glass.png", "homedecor_shingles_wood.png" },
  262. S("Glass Shingles")
  263. )
  264. homedecor.register("chimney", {
  265. description = S("Chimney"),
  266. mesh = "homedecor_chimney.obj",
  267. tiles = {
  268. "homedecor_chimney_tb.png",
  269. "default_brick.png"
  270. },
  271. selection_box = homedecor.nodebox.bar_y(0.25),
  272. groups = {cracky=3},
  273. sounds = default.node_sound_stone_defaults()
  274. })
  275. -- crafting
  276. minetest.register_craft( {
  277. output = "homedecor:skylight 4",
  278. recipe = {
  279. { "homedecor:glass_table_large", "homedecor:glass_table_large" },
  280. { "homedecor:glass_table_large", "homedecor:glass_table_large" },
  281. },
  282. })
  283. minetest.register_craft( {
  284. type = "shapeless",
  285. output = "homedecor:skylight_frosted",
  286. recipe = {
  287. "dye:white",
  288. "homedecor:skylight"
  289. },
  290. })
  291. minetest.register_craft({
  292. type = "cooking",
  293. output = "homedecor:skylight",
  294. recipe = "homedecor:skylight_frosted",
  295. })
  296. -- recycling
  297. minetest.register_craft({
  298. type = "shapeless",
  299. output = "vessels:glass_fragments 2",
  300. recipe = {
  301. "homedecor:skylight",
  302. "homedecor:skylight",
  303. "homedecor:skylight",
  304. "homedecor:skylight",
  305. "homedecor:skylight",
  306. "homedecor:skylight"
  307. }
  308. })