slabs.lua 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. --[[
  2. More Blocks: slab definitions
  3. Copyright (c) 2011-2017 Hugo Locurcio and contributors.
  4. Licensed under the zlib license. See LICENSE.md for more information.
  5. --]]
  6. local S = moreblocks.intllib
  7. -- Node will be called <modname>:slab_<subname>
  8. function register_slab(modname, subname, recipeitem, groups, images, description, drop, light)
  9. stairsplus:register_slab(modname, subname, recipeitem, {
  10. groups = groups,
  11. tiles = images,
  12. description = description,
  13. drop = drop,
  14. light_source = light,
  15. sounds = default.node_sound_stone_defaults(),
  16. })
  17. end
  18. local slabs_defs = {
  19. [""] = 8,
  20. ["_quarter"] = 4,
  21. ["_three_quarter"] = 12,
  22. ["_1"] = 1,
  23. ["_2"] = 2,
  24. ["_14"] = 14,
  25. ["_15"] = 15,
  26. ["_two_sides"] = {
  27. { -0.5, -0.5, -0.5, 0.5, -7/16, 7/16 },
  28. { -0.5, -0.5, 7/16, 0.5, 0.5, 0.5 }
  29. },
  30. ["_three_sides"] = {
  31. { -7/16, -0.5, -0.5, 0.5, -7/16, 7/16 },
  32. { -7/16, -0.5, 7/16, 0.5, 0.5, 0.5 },
  33. { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 }
  34. },
  35. ["_three_sides_u"] = {
  36. { -0.5, -0.5, -0.5, 0.5, 0.5, -7/16 },
  37. { -0.5, -0.5, -7/16, 0.5, -7/16, 7/16 },
  38. { -0.5, -0.5, 7/16, 0.5, 0.5, 0.5 }
  39. }
  40. }
  41. for k,v in pairs(slabs_defs) do
  42. table.insert(stairsplus.shapes_list, { "slab_", k })
  43. end
  44. function stairsplus:register_slab_alias(modname_old, subname_old, modname_new, subname_new)
  45. local defs = stairsplus.copytable(slabs_defs)
  46. for alternate, def in pairs(defs) do
  47. minetest.register_alias(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate)
  48. end
  49. end
  50. function stairsplus:register_slab_alias_force(modname_old, subname_old, modname_new, subname_new)
  51. local defs = stairsplus.copytable(slabs_defs)
  52. for alternate, def in pairs(defs) do
  53. minetest.register_alias_force(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate)
  54. end
  55. end
  56. function stairsplus:register_slab(modname, subname, recipeitem, fields)
  57. local defs = stairsplus.copytable(slabs_defs)
  58. local desc_base = S("%s Slab"):format(fields.description)
  59. local use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or fields.use_texture_alpha
  60. for alternate, shape in pairs(defs) do
  61. local def = {}
  62. if type(shape) ~= "table" then
  63. def = {
  64. node_box = {
  65. type = "fixed",
  66. fixed = {-0.5, -0.5, -0.5, 0.5, (shape/16)-0.5, 0.5},
  67. },
  68. description = ("%s (%d/16)"):format(desc_base, shape)
  69. }
  70. else
  71. def = {
  72. node_box = {
  73. type = "fixed",
  74. fixed = shape,
  75. },
  76. description = desc_base
  77. }
  78. end
  79. for k, v in pairs(fields) do
  80. def[k] = v
  81. end
  82. def.drawtype = "nodebox"
  83. def.paramtype = "light"
  84. def.paramtype2 = def.paramtype2 or "facedir"
  85. def.use_texture_alpha = use_texture_alpha
  86. def.on_place = minetest.rotate_node
  87. def.groups = stairsplus:prepare_groups(fields.groups)
  88. if alternate == "_1" or alternate == "_two_sides" then
  89. def.groups.not_blocking_trains = 1
  90. end
  91. if fields.drop and not (type(fields.drop) == "table") then
  92. def.drop = modname.. ":slab_" .. fields.drop .. alternate
  93. end
  94. minetest.register_node(":" .. modname .. ":slab_" .. subname .. alternate, def)
  95. end
  96. minetest.register_alias("stairs:slab_" .. subname, modname .. ":slab_" .. subname)
  97. circular_saw.known_nodes[recipeitem] = {modname, subname}
  98. -- Some saw-less recipes:
  99. minetest.register_craft({
  100. output = modname .. ":slab_" .. subname .. " 6",
  101. recipe = {{recipeitem, recipeitem, recipeitem}},
  102. })
  103. minetest.register_craft({
  104. type = "shapeless",
  105. output = modname .. ":slab_" .. subname,
  106. recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
  107. })
  108. -- uncomment this rule when conflict is no longer likely to happen
  109. -- https://github.com/minetest/minetest/issues/2881
  110. -- minetest.register_craft({
  111. -- type = "shapeless",
  112. -- output = modname .. ":slab_" .. subname,
  113. -- recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname},
  114. -- })
  115. -- then remove these two
  116. minetest.register_craft({
  117. output = modname .. ":slab_" .. subname,
  118. recipe = {{modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}},
  119. })
  120. minetest.register_craft({
  121. output = modname .. ":slab_" .. subname,
  122. recipe = {
  123. {modname .. ":panel_" .. subname},
  124. {modname .. ":panel_" .. subname},
  125. },
  126. })
  127. ------------------------------
  128. minetest.register_craft({
  129. type = "shapeless",
  130. output = recipeitem,
  131. recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname},
  132. })
  133. minetest.register_craft({
  134. type = "shapeless",
  135. output = recipeitem,
  136. recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"},
  137. })
  138. minetest.register_craft({
  139. type = "shapeless",
  140. output = recipeitem,
  141. recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
  142. })
  143. minetest.register_craft({
  144. type = "shapeless",
  145. output = recipeitem,
  146. recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_quarter"},
  147. })
  148. minetest.register_craft({
  149. type = "shapeless",
  150. output = recipeitem,
  151. recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_2"},
  152. })
  153. minetest.register_craft({
  154. type = "shapeless",
  155. output = recipeitem,
  156. recipe = {modname .. ":slab_" .. subname .. "_15", modname .. ":slab_" .. subname .. "_1"},
  157. })
  158. minetest.register_craft({
  159. type = "shapeless",
  160. output = modname .. ":slab_" .. subname,
  161. recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"},
  162. })
  163. minetest.register_craft({
  164. type = "shapeless",
  165. output = modname .. ":slab_" .. subname,
  166. recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
  167. })
  168. minetest.register_craft({
  169. type = "shapeless",
  170. output = modname .. ":slab_" .. subname,
  171. recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"},
  172. })
  173. minetest.register_craft({
  174. type = "shapeless",
  175. output = modname .. ":slab_" .. subname .. "_quarter",
  176. recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
  177. })
  178. minetest.register_craft({
  179. type = "shapeless",
  180. output = modname .. ":slab_" .. subname .. "_quarter",
  181. recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"},
  182. })
  183. minetest.register_craft({
  184. type = "shapeless",
  185. output = modname .. ":slab_" .. subname .. "_2",
  186. recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"},
  187. })
  188. minetest.register_craft({
  189. type = "shapeless",
  190. output = modname .. ":slab_" .. subname .. "_three_quarter",
  191. recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname .. "_quarter"},
  192. })
  193. minetest.register_craft({
  194. type = "shapeless",
  195. output = modname .. ":slab_" .. subname .. "_three_quarter",
  196. recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"},
  197. })
  198. minetest.register_craft({
  199. type = "shapeless",
  200. output = modname .. ":slab_" .. subname .. "_three_quarter",
  201. recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
  202. })
  203. minetest.register_craft({
  204. type = "shapeless",
  205. output = modname .. ":slab_" .. subname .. "_14",
  206. recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_2"},
  207. })
  208. minetest.register_craft({
  209. type = "shapeless",
  210. output = modname .. ":slab_" .. subname .. "_14",
  211. recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
  212. })
  213. minetest.register_craft({
  214. type = "shapeless",
  215. output = modname .. ":slab_" .. subname .. "_15",
  216. recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_1"},
  217. })
  218. minetest.register_craft({
  219. type = "shapeless",
  220. output = modname .. ":slab_" .. subname .. " 3",
  221. recipe = {modname .. ":stair_" .. subname, modname .. ":stair_" .. subname},
  222. })
  223. end