init.lua 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. --[[
  2. wall center = wc
  3. wall edge = we
  4. center = ce
  5. Horizontal/Vertical
  6. ]]
  7. timbers = {}
  8. timbers.dye_more = function(pos, node, puncher, pointed_thing)
  9. local player = puncher:get_player_name()
  10. local wield = puncher:get_wielded_item()
  11. local wield_name = wield:get_name()
  12. if minetest.is_protected(pos, player) and not minetest.check_player_privs(puncher, 'protection_bypass') or wield_name == 'creative:tool_breaking' then
  13. return
  14. end
  15. minetest.swap_node(pos, {name = node.name, param2 = node.param2+32})
  16. end
  17. timbers.dye_less = function(pos, node, clicker)
  18. local player = clicker:get_player_name()
  19. if minetest.is_protected(pos, player) and not minetest.check_player_privs(clicker, 'protection_bypass') then
  20. return
  21. end
  22. minetest.swap_node(pos, {name = node.name, param2 = node.param2-32})
  23. end
  24. minetest.register_node('timbers:placeholder', {
  25. description = 'empty node :P',
  26. drawtype = 'airlike',
  27. paramtype = 'light',
  28. walkable = false,
  29. pointable = false,
  30. groups = {not_in_creative_inventory = 1, empty_node=1},
  31. })
  32. local function placement(pos, placer, itemstack, pointed_thing)
  33. local nodeu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
  34. local nodeu_name = nodeu.name
  35. local replacement = string.sub(nodeu_name, 1, 13)..'2'
  36. if nodeu_name == itemstack:get_name() then
  37. minetest.set_node({x=pos.x, y=pos.y-1, z=pos.z},{name = replacement, param2=nodeu.param2})
  38. minetest.set_node(pos,{name = 'timbers:placeholder'})
  39. end
  40. end
  41. local function remove_empty(pos, node, digger)
  42. minetest.set_node({x=pos.x, y=pos.y+1, z=pos.z},{name = 'air'})
  43. end
  44. --Single height/width
  45. local v_ce_1 = {
  46. type = 'fixed',
  47. fixed = {-.125, -.5, -.125, .125, .5, .125}}
  48. minetest.register_node('timbers:v_ce_1', {
  49. description = 'Single Timber (Centered)',
  50. drawtype = 'mesh',
  51. mesh = 'timbers_v_ce_1.obj',
  52. tiles = {'timbers_wood.png'},
  53. paramtype = 'light',
  54. paramtype2 = 'colorfacedir',
  55. palette = 'timbers_palette.png',
  56. selection_box = v_ce_1,
  57. collision_box = v_ce_1,
  58. groups = {oddly_breakable_by_hand=3, breakable=1},
  59. after_place_node = placement,
  60. on_rightclick = timbers.dye_less,
  61. on_punch = timbers.dye_more,
  62. })
  63. local v_wc_1 = {
  64. type = 'fixed',
  65. fixed = {-.125, -.5, .5, .125, .5, .25}}
  66. minetest.register_node('timbers:v_wc_1', {
  67. description = 'Single Timber (Centered on Wall)',
  68. drawtype = 'mesh',
  69. mesh = 'timbers_v_wc_1.obj',
  70. tiles = {'timbers_wood.png'},
  71. paramtype = 'light',
  72. paramtype2 = 'colorfacedir',
  73. palette = 'timbers_palette.png',
  74. selection_box = v_wc_1,
  75. collision_box = v_wc_1,
  76. groups = {oddly_breakable_by_hand=3, breakable=1},
  77. after_place_node = placement,
  78. on_rightclick = timbers.dye_less,
  79. on_punch = timbers.dye_more,
  80. })
  81. local v_we_1 = {
  82. type = 'fixed',
  83. fixed = {.25, -.5, .25, .5, .5, .5}}
  84. minetest.register_node('timbers:v_we_1', {
  85. description = 'Single Timber (Inside Corner)',
  86. drawtype = 'mesh',
  87. mesh = 'timbers_v_we_1.obj',
  88. tiles = {'timbers_wood.png'},
  89. paramtype = 'light',
  90. paramtype2 = 'colorfacedir',
  91. palette = 'timbers_palette.png',
  92. selection_box = v_we_1,
  93. collision_box = v_we_1,
  94. groups = {oddly_breakable_by_hand=3, breakable=1},
  95. after_place_node = placement,
  96. on_rightclick = timbers.dye_less,
  97. on_punch = timbers.dye_more,
  98. })
  99. local h_ce_1 = {
  100. type = 'fixed',
  101. fixed = {-.5, -.125, -.125, .5, .125, .125}}
  102. minetest.register_node('timbers:h_ce_1', {
  103. description = 'Single Timber (Centered)',
  104. drawtype = 'mesh',
  105. mesh = 'timbers_h_ce_1.obj',
  106. tiles = {'timbers_wood.png'},
  107. paramtype = 'light',
  108. paramtype2 = 'colorfacedir',
  109. palette = 'timbers_palette.png',
  110. selection_box = h_ce_1,
  111. collision_box = h_ce_1,
  112. groups = {oddly_breakable_by_hand=3, breakable=1},
  113. on_rightclick = timbers.dye_less,
  114. on_punch = timbers.dye_more,
  115. })
  116. local h_wc_1 = {
  117. type = 'fixed',
  118. fixed = {-.5, -.5, -.125, .5, -.25, .125}}
  119. minetest.register_node('timbers:h_wc_1', {
  120. description = 'Single Timber (Centered on Wall)',
  121. drawtype = 'mesh',
  122. mesh = 'timbers_h_wc_1.obj',
  123. tiles = {'timbers_wood.png'},
  124. paramtype = 'light',
  125. paramtype2 = 'colorfacedir',
  126. palette = 'timbers_palette.png',
  127. selection_box = h_wc_1,
  128. collision_box = h_wc_1,
  129. groups = {oddly_breakable_by_hand=3, breakable=1},
  130. on_rightclick = timbers.dye_less,
  131. on_punch = timbers.dye_more,
  132. })
  133. local h_we_1 = {
  134. type = 'fixed',
  135. fixed = {-.5, -.5, .25, .5, -.25, .5}}
  136. minetest.register_node('timbers:h_we_1', {
  137. description = 'Single Timber (Inside Corner)',
  138. drawtype = 'mesh',
  139. mesh = 'timbers_h_we_1.obj',
  140. tiles = {'timbers_wood.png'},
  141. paramtype = 'light',
  142. paramtype2 = 'colorfacedir',
  143. palette = 'timbers_palette.png',
  144. selection_box = h_we_1,
  145. collision_box = h_we_1,
  146. groups = {oddly_breakable_by_hand=3, breakable=1},
  147. on_rightclick = timbers.dye_less,
  148. on_punch = timbers.dye_more,
  149. })
  150. --Double height/width
  151. local v_ce_2 = {
  152. type = 'fixed',
  153. fixed = {-.125, -.5, -.125, .125, 1.5, .125}}
  154. minetest.register_node('timbers:v_ce_2', {
  155. description = 'Double Timber (Centered)',
  156. drawtype = 'mesh',
  157. mesh = 'timbers_v_ce_2.obj',
  158. tiles = {'timbers_wood.png'},
  159. paramtype = 'light',
  160. paramtype2 = 'colorfacedir',
  161. palette = 'timbers_palette.png',
  162. selection_box = v_ce_2,
  163. collision_box = v_ce_2,
  164. groups = {oddly_breakable_by_hand=3, not_in_creative_inventory=1, breakable=1},
  165. drop = 'timbers:v_ce_1 2',
  166. after_dig_node = remove_empty,
  167. on_rightclick = timbers.dye_less,
  168. on_punch = timbers.dye_more,
  169. })
  170. local v_wc_2 = {
  171. type = 'fixed',
  172. fixed = {-.125, -.5, .5, .125, 1.5, .25}}
  173. minetest.register_node('timbers:v_wc_2', {
  174. description = 'Double Timber (Centered on Wall)',
  175. drawtype = 'mesh',
  176. mesh = 'timbers_v_wc_2.obj',
  177. tiles = {'timbers_wood.png'},
  178. paramtype = 'light',
  179. paramtype2 = 'colorfacedir',
  180. palette = 'timbers_palette.png',
  181. selection_box = v_wc_2,
  182. collision_box = v_wc_2,
  183. groups = {oddly_breakable_by_hand=3, not_in_creative_inventory=1, breakable=1},
  184. drop = 'timbers:v_wc_1 2',
  185. after_dig_node = remove_empty,
  186. on_rightclick = timbers.dye_less,
  187. on_punch = timbers.dye_more,
  188. })
  189. local v_we_2 = {
  190. type = 'fixed',
  191. fixed = {.25, -.5, .25, .5, 1.5, .5}}
  192. minetest.register_node('timbers:v_we_2', {
  193. description = 'Double Timber (Inside Corner)',
  194. drawtype = 'mesh',
  195. mesh = 'timbers_v_we_2.obj',
  196. tiles = {'timbers_wood.png'},
  197. paramtype = 'light',
  198. paramtype2 = 'colorfacedir',
  199. palette = 'timbers_palette.png',
  200. selection_box = v_we_2,
  201. collision_box = v_we_2,
  202. groups = {oddly_breakable_by_hand=3, not_in_creative_inventory=1, breakable=1},
  203. drop = 'timbers:v_we_1 2',
  204. after_dig_node = remove_empty,
  205. on_rightclick = timbers.dye_less,
  206. on_punch = timbers.dye_more,
  207. })
  208. minetest.register_node('timbers:v_we_2_support', {
  209. description = 'Double Timber (Inside Corner Support)',
  210. drawtype = 'mesh',
  211. mesh = 'timbers_v_we_2_support.obj',
  212. tiles = {'timbers_wood.png'},
  213. paramtype = 'light',
  214. paramtype2 = 'colorfacedir',
  215. palette = 'timbers_palette.png',
  216. selection_box = v_we_2,
  217. collision_box = v_we_2,
  218. groups = {oddly_breakable_by_hand=3, breakable=1},
  219. after_dig_node = remove_empty,
  220. on_rightclick = timbers.dye_less,
  221. on_punch = timbers.dye_more,
  222. })
  223. minetest.register_node('timbers:v_wc_2_support', {
  224. description = 'Double Timber (Centered on Wall Support)',
  225. drawtype = 'mesh',
  226. mesh = 'timbers_v_wc_2_support.obj',
  227. tiles = {'timbers_wood.png'},
  228. paramtype = 'light',
  229. paramtype2 = 'colorfacedir',
  230. palette = 'timbers_palette.png',
  231. selection_box = v_wc_2,
  232. collision_box = v_wc_2,
  233. groups = {oddly_breakable_by_hand=3, breakable=1},
  234. after_dig_node = remove_empty,
  235. on_rightclick = timbers.dye_less,
  236. on_punch = timbers.dye_more,
  237. })