init.lua 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. -- Minetest 0.4 mod: vessels
  2. -- See README.txt for licensing and other information.
  3. local vessels_shelf_formspec =
  4. "size[8,7;]" ..
  5. default.gui_bg ..
  6. default.gui_bg_img ..
  7. default.gui_slots ..
  8. "list[context;vessels;0,0.3;8,2;]" ..
  9. "list[current_player;main;0,2.85;8,1;]" ..
  10. "list[current_player;main;0,4.08;8,3;8]" ..
  11. "listring[context;vessels]" ..
  12. "listring[current_player;main]" ..
  13. default.get_hotbar_bg(0, 2.85)
  14. local function get_vessels_shelf_formspec(inv)
  15. local formspec = vessels_shelf_formspec
  16. local invlist = inv and inv:get_list("vessels")
  17. -- Inventory slots overlay
  18. local vx, vy = 0, 0.3
  19. for i = 1, 16 do
  20. if i == 9 then
  21. vx = 0
  22. vy = vy + 1
  23. end
  24. if not invlist or invlist[i]:is_empty() then
  25. formspec = formspec ..
  26. "image[" .. vx .. "," .. vy .. ";1,1;vessels_shelf_slot.png]"
  27. end
  28. vx = vx + 1
  29. end
  30. return formspec
  31. end
  32. minetest.register_node("vessels:shelf", {
  33. description = "Vessels Shelf",
  34. tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
  35. "default_wood.png", "vessels_shelf.png", "vessels_shelf.png"},
  36. paramtype2 = "facedir",
  37. is_ground_content = false,
  38. stack_max = 2,
  39. groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
  40. sounds = default.node_sound_wood_defaults(),
  41. on_construct = function(pos)
  42. local meta = minetest.get_meta(pos)
  43. meta:set_string("formspec", get_vessels_shelf_formspec(nil))
  44. local inv = meta:get_inventory()
  45. inv:set_size("vessels", 8 * 2)
  46. end,
  47. can_dig = function(pos,player)
  48. local inv = minetest.get_meta(pos):get_inventory()
  49. return inv:is_empty("vessels")
  50. end,
  51. allow_metadata_inventory_put = function(pos, listname, index, stack, player)
  52. if minetest.get_item_group(stack:get_name(), "vessel") ~= 0 then
  53. return stack:get_count()
  54. end
  55. return 0
  56. end,
  57. on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  58. minetest.log("action", player:get_player_name() ..
  59. " moves stuff in vessels shelf at ".. minetest.pos_to_string(pos))
  60. local meta = minetest.get_meta(pos)
  61. meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory()))
  62. end,
  63. on_metadata_inventory_put = function(pos, listname, index, stack, player)
  64. minetest.log("action", player:get_player_name() ..
  65. " moves stuff to vessels shelf at ".. minetest.pos_to_string(pos))
  66. local meta = minetest.get_meta(pos)
  67. meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory()))
  68. end,
  69. on_metadata_inventory_take = function(pos, listname, index, stack, player)
  70. minetest.log("action", player:get_player_name() ..
  71. " takes stuff from vessels shelf at ".. minetest.pos_to_string(pos))
  72. local meta = minetest.get_meta(pos)
  73. meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory()))
  74. end,
  75. on_blast = function(pos)
  76. local drops = {}
  77. default.get_inventory_drops(pos, "vessels", drops)
  78. drops[#drops + 1] = "vessels:shelf"
  79. minetest.remove_node(pos)
  80. return drops
  81. end,
  82. })
  83. minetest.register_craft({
  84. output = "vessels:shelf",
  85. recipe = {
  86. {"group:wood", "group:wood", "group:wood"},
  87. {"group:vessel", "group:vessel", "group:vessel"},
  88. {"group:wood", "group:wood", "group:wood"},
  89. }
  90. })
  91. minetest.register_node("vessels:glass_bottle", {
  92. description = "Empty Glass Bottle",
  93. drawtype = "plantlike",
  94. tiles = {"vessels_glass_bottle.png"},
  95. inventory_image = "vessels_glass_bottle.png",
  96. wield_image = "vessels_glass_bottle.png",
  97. paramtype = "light",
  98. stack_max = 10,
  99. is_ground_content = false,
  100. walkable = false,
  101. selection_box = {
  102. type = "fixed",
  103. fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
  104. },
  105. groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
  106. sounds = default.node_sound_glass_defaults(),
  107. })
  108. minetest.register_craft( {
  109. output = "vessels:glass_bottle 10",
  110. recipe = {
  111. {"default:glass", "", "default:glass"},
  112. {"default:glass", "", "default:glass"},
  113. {"", "default:glass", ""}
  114. }
  115. })
  116. minetest.register_node("vessels:drinking_glass", {
  117. description = "Empty Drinking Glass",
  118. drawtype = "plantlike",
  119. tiles = {"vessels_drinking_glass.png"},
  120. inventory_image = "vessels_drinking_glass_inv.png",
  121. wield_image = "vessels_drinking_glass.png",
  122. paramtype = "light",
  123. is_ground_content = false,
  124. stack_max = 14,
  125. walkable = false,
  126. selection_box = {
  127. type = "fixed",
  128. fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
  129. },
  130. groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
  131. sounds = default.node_sound_glass_defaults(),
  132. })
  133. minetest.register_craft( {
  134. output = "vessels:drinking_glass 14",
  135. recipe = {
  136. {"default:glass", "", "default:glass"},
  137. {"default:glass", "", "default:glass"},
  138. {"default:glass", "default:glass", "default:glass"}
  139. }
  140. })
  141. minetest.register_node("vessels:steel_bottle", {
  142. description = "Empty Heavy Steel Bottle",
  143. drawtype = "plantlike",
  144. tiles = {"vessels_steel_bottle.png"},
  145. inventory_image = "vessels_steel_bottle.png",
  146. wield_image = "vessels_steel_bottle.png",
  147. paramtype = "light",
  148. stack_max = 5,
  149. is_ground_content = false,
  150. walkable = false,
  151. selection_box = {
  152. type = "fixed",
  153. fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
  154. },
  155. groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
  156. sounds = default.node_sound_defaults(),
  157. })
  158. minetest.register_craft( {
  159. output = "vessels:steel_bottle 5",
  160. recipe = {
  161. {"default:steel_ingot", "", "default:steel_ingot"},
  162. {"default:steel_ingot", "", "default:steel_ingot"},
  163. {"", "default:steel_ingot", ""}
  164. }
  165. })
  166. -- Glass and steel recycling
  167. minetest.register_craftitem("vessels:glass_fragments", {
  168. description = "Glass Fragments",
  169. stack_max = 14,
  170. inventory_image = "vessels_glass_fragments.png",
  171. })
  172. minetest.register_craft( {
  173. type = "shapeless",
  174. output = "vessels:glass_fragments",
  175. recipe = {
  176. "vessels:glass_bottle",
  177. "vessels:glass_bottle",
  178. },
  179. })
  180. minetest.register_craft( {
  181. type = "shapeless",
  182. output = "vessels:glass_fragments",
  183. recipe = {
  184. "vessels:drinking_glass",
  185. "vessels:drinking_glass",
  186. },
  187. })
  188. minetest.register_craft({
  189. type = "cooking",
  190. output = "default:glass",
  191. recipe = "vessels:glass_fragments",
  192. })
  193. minetest.register_craft( {
  194. type = "cooking",
  195. output = "default:steel_ingot",
  196. recipe = "vessels:steel_bottle",
  197. })
  198. minetest.register_craft({
  199. type = "fuel",
  200. recipe = "vessels:shelf",
  201. burntime = 30,
  202. })