init.lua 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. if not minetest.global_exists("default") then default = {} end
  2. if not minetest.global_exists("fencelike") then fencelike = {} end
  3. fencelike.modpath = minetest.get_modpath("fencelike")
  4. local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0
  5. fence_collision_extra = 0 -- Ignore setting.
  6. --
  7. -- Fence registration helper
  8. --
  9. function default.register_fence(name, def)
  10. minetest.register_craft({
  11. output = name .. " 4",
  12. recipe = {
  13. { def.material, 'group:stick', def.material },
  14. { def.material, 'group:stick', def.material },
  15. }
  16. })
  17. local fence_texture = "default_fence_overlay.png^" .. def.texture ..
  18. "^default_fence_overlay.png^[makealpha:255,126,126"
  19. -- Allow almost everything to be overridden
  20. local default_fields = {
  21. paramtype = "light",
  22. drawtype = "nodebox",
  23. node_box = {
  24. type = "connected",
  25. fixed = {{-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}},
  26. -- connect_top =
  27. -- connect_bottom =
  28. connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8},
  29. {-1/16,-5/16,-1/2,1/16,-3/16,-1/8}},
  30. connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16},
  31. {-1/2,-5/16,-1/16,-1/8,-3/16,1/16}},
  32. connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2},
  33. {-1/16,-5/16,1/8,1/16,-3/16,1/2}},
  34. connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16},
  35. {1/8,-5/16,-1/16,1/2,-3/16,1/16}},
  36. },
  37. collision_box = {
  38. type = "connected",
  39. fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
  40. -- connect_top =
  41. -- connect_bottom =
  42. connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
  43. connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
  44. connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
  45. connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
  46. },
  47. connects_to = {"group:fence", "group:wood", "group:tree"},
  48. inventory_image = fence_texture,
  49. wield_image = fence_texture,
  50. tiles = {def.texture},
  51. sunlight_propagates = true,
  52. is_ground_content = false,
  53. groups = {},
  54. }
  55. for k, v in pairs(default_fields) do
  56. if not def[k] then
  57. def[k] = v
  58. end
  59. end
  60. -- Always add to the fence group, even if no group provided
  61. def.groups.fence = 1
  62. def.texture = nil
  63. def.material = nil
  64. minetest.register_node(name, def)
  65. end
  66. --
  67. -- Fence rail registration helper
  68. --
  69. function default.register_fence_rail(name, def)
  70. minetest.register_craft({
  71. output = name .. " 8",
  72. recipe = {
  73. { def.material, def.material },
  74. { "group:stick", "group:stick"},
  75. { def.material, def.material },
  76. }
  77. })
  78. local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture ..
  79. "^default_fence_rail_overlay.png^[makealpha:255,126,126"
  80. -- Allow almost everything to be overridden
  81. local default_fields = {
  82. paramtype = "light",
  83. drawtype = "nodebox",
  84. node_box = {
  85. type = "connected",
  86. fixed = {{-1/16, 3/16, -1/16, 1/16, 5/16, 1/16},
  87. {-1/16, -3/16, -1/16, 1/16, -5/16, 1/16}},
  88. -- connect_top =
  89. -- connect_bottom =
  90. connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/16},
  91. {-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}},
  92. connect_left = {{-1/2, 3/16, -1/16, -1/16, 5/16, 1/16},
  93. {-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}},
  94. connect_back = {{-1/16, 3/16, 1/16, 1/16, 5/16, 1/2 },
  95. {-1/16, -5/16, 1/16, 1/16, -3/16, 1/2 }},
  96. connect_right = {{ 1/16, 3/16, -1/16, 1/2, 5/16, 1/16},
  97. { 1/16, -5/16, -1/16, 1/2, -3/16, 1/16}}
  98. },
  99. collision_box = {
  100. type = "connected",
  101. fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
  102. -- connect_top =
  103. -- connect_bottom =
  104. connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
  105. connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
  106. connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
  107. connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
  108. },
  109. connects_to = {"group:fence", "group:wall"},
  110. inventory_image = fence_rail_texture,
  111. wield_image = fence_rail_texture,
  112. tiles = {def.texture},
  113. sunlight_propagates = true,
  114. is_ground_content = false,
  115. groups = {},
  116. }
  117. for k, v in pairs(default_fields) do
  118. if def[k] == nil then
  119. def[k] = v
  120. end
  121. end
  122. -- Always add to the fence group, even if no group provided
  123. def.groups.fence = 1
  124. def.texture = nil
  125. def.material = nil
  126. minetest.register_node(name, def)
  127. end