machine.lua 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. local material = {}
  2. local matr = {}
  3. local matr2 = {}
  4. local shape = {}
  5. local shape2 = {}
  6. local make_ok = 0
  7. local anzahl = {}
  8. local anzahlz = {}
  9. dye_colors = {
  10. {"dye:black","black"},
  11. {"dye:blue","blue"},
  12. {"dye:brown","brown"},
  13. {"dye:cyan","cyan"},
  14. {"dye:dark_green","dark_green"},
  15. {"dye:dark_grey","dark_grey"},
  16. {"dye:green","green"},
  17. {"dye:grey","grey"},
  18. {"dye:magenta","magenta"},
  19. {"dye:orange","orange"},
  20. {"dye:pink","pink"},
  21. {"dye:red","red"},
  22. {"dye:violet","violet"},
  23. {"dye:white","white"},
  24. {"dye:yellow","yellow"},
  25. }
  26. corner_items = {
  27. {"_wood_black"},
  28. {"_wood_blue"},
  29. {"_wood_brown"},
  30. {"_wood_cyan"},
  31. {"_wood_dark_green"},
  32. {"_wood_dark_grey"},
  33. {"_wood_green"},
  34. {"_wood_grey"},
  35. {"_wood_magenta"},
  36. {"_wood_orange"},
  37. {"_wood_pink"},
  38. {"_wood_red"},
  39. {"_wood_violet"},
  40. {"_wood_white"},
  41. {"_wood_yellow"},
  42. {"_stone_black"},
  43. {"_stone_blue"},
  44. {"_stone_brown"},
  45. {"_stone_cyan"},
  46. {"_stone_dark_green"},
  47. {"_stone_dark_grey"},
  48. {"_stone_green"},
  49. {"_stone_grey"},
  50. {"_stone_magenta"},
  51. {"_stone_orange"},
  52. {"_stone_pink"},
  53. {"_stone_red"},
  54. {"_stone_violet"},
  55. {"_stone_white"},
  56. {"_stone_yellow"},
  57. {"_stonebrick_black"},
  58. {"_stonebrick_blue"},
  59. {"_stonebrick_brown"},
  60. {"_stonebrick_cyan"},
  61. {"_stonebrick_dark_green"},
  62. {"_stonebrick_dark_grey"},
  63. {"_stonebrick_green"},
  64. {"_stonebrick_grey"},
  65. {"_stonebrick_magenta"},
  66. {"_stonebrick_orange"},
  67. {"_stonebrick_pink"},
  68. {"_stonebrick_red"},
  69. {"_stonebrick_violet"},
  70. {"_stonebrick_white"},
  71. {"_stonebrick_yellow"},
  72. }
  73. local nodes_of_corners = {
  74. {"default:brick","default_brick"},
  75. --{"default:bronzeblock","default_bronze_block"},
  76. --{"default:cactus","default_cactus"},
  77. {"default:clay","default_clay"},
  78. --{"default:coalblock","default_coal_block"},
  79. {"default:cobble","default_cobble"},
  80. --{"default:copperblock","default_copper_block"},
  81. {"default:desert_cobble","default_desert_cobble"},
  82. --{"default:desert_sand","default_desert_sand"},
  83. {"default:desert_stone","default_desert_stone"},
  84. --{"default:diamondblock","default_diamond_block"},
  85. --{"default:dirt","default_dirt"},
  86. --{"default:glass","default_glass"},
  87. --{"default:goldblock","default_gold_block"},
  88. --{"default:gravel","default_gravel"},
  89. --{"default:ice","default_ice"},
  90. --{"default:jungletree","default_jungletree"},
  91. {"default:junglewood","default_junglewood"},
  92. --{"default:lava_source","default_lava"},
  93. --{"default:mese","default_mese"},
  94. {"default:mossycobble","default_mossycobble"},
  95. --{"default:obsidian","default_obsidian"},
  96. --{"default:obsidian_glass","default_obsidian_glass"},
  97. --{"default:obsidianbrick","default_obsidian_brick"},
  98. --{"default:pine_tree","default_pine_tree"},
  99. {"default:pine_wood","default_pine_wood"},
  100. --{"default:acacia_tree","default_acacia_tree"},
  101. {"default:acacia_wood","default_acacia_wood"},
  102. --{"default:sand","default_sand"},
  103. {"default:sandstone","default_sandstone"},
  104. {"default:sandstonebrick","default_sandstone_brick"},
  105. --{"default:snowblock","default_snow"},
  106. {"default:steelblock","default_steel_block"},
  107. {"default:stone","default_stone"},
  108. {"default:stonebrick","default_stone_brick"},
  109. --{"default:tree","default_tree"},
  110. --{"default:water_source","default_water"},
  111. {"default:wood","default_wood"},
  112. --{"farming:straw","farming_straw"},
  113. --{"wool:black","wool_black"},
  114. --{"wool:blue","wool_blue"},
  115. --{"wool:brown","wool_brown"},
  116. --{"wool:cyan","wool_cyan"},
  117. --{"wool:dark_green","wool_dark_green"},
  118. --{"wool:dark_grey","wool_dark_grey"},
  119. --{"wool:green","wool_green"},
  120. --{"wool:grey","wool_grey"},
  121. --{"wool:magenta","wool_magenta"},
  122. --{"wool:orange","wool_orange"},
  123. --{"wool:pink","wool_pink"},
  124. --{"wool:red","wool_red"},
  125. --{"wool:violet","wool_violet"},
  126. --{"wool:white","wool_white"},
  127. --{"wool:yellow","wool_yellow"},
  128. }
  129. minetest.register_alias("mycorners:machine_installer", "mycorners:machine_corner")
  130. minetest.register_node("mycorners:machine_corner", {
  131. description = "Corner Machine",
  132. tiles = {
  133. "mycorners_machine_top.png",
  134. "mycorners_machine_bottom.png",
  135. "mycorners_machine_sider.png",
  136. "mycorners_machine_sidel.png",
  137. "mycorners_machine_back.png",
  138. "mycorners_machine_front.png"
  139. },
  140. drawtype = "nodebox",
  141. paramtype = "light",
  142. paramtype2 = "facedir",
  143. groups = {cracky=2},
  144. node_box = {
  145. type = "fixed",
  146. fixed = {
  147. {0.3125, -0.5, -0.5, 0.5, -0.1875, -0.3125},
  148. {0.3125, -0.5, 0.3125, 0.5, -0.1875, 0.5},
  149. {-0.5, -0.5, 0.3125, -0.3125, -0.1875, 0.5},
  150. {-0.5, -0.5, -0.5, -0.3125, -0.1875, -0.3125},
  151. {-0.5, -0.1875, -0.5, 0.5, -0.0625, 0.5},
  152. {-0.0625, -0.0625, -0.25, 0, 0.0625, -0.1875},
  153. {-0.1875, -0.4375, -0.3125, 0.125, -0.1875, -0.125},
  154. {-0.125, -0.4375, -0.375, 0.0625, -0.1875, -0.0625},
  155. {-0.25, -0.0625, -0.1875, 0.1875, 0.125, 0.0625},
  156. {-0.4375, -0.0625, 0.125, 0.4375, 0.0625, 0.25},
  157. {-0.4375, -0.0625, -0, 0.4375, 0.1875, 0.125},
  158. {-0.1875, -0.25, -0.375, 0.125, -0.1875, -0.0625},
  159. }
  160. },
  161. after_place_node = function(pos, placer)
  162. local meta = minetest.get_meta(pos);
  163. meta:set_string("owner", (placer:get_player_name() or ""));
  164. meta:set_string("infotext", "Corner Machine (owned by " .. (placer:get_player_name() or "") .. ")");
  165. end,
  166. can_dig = function(pos,player)
  167. local meta = minetest.get_meta(pos);
  168. local inv = meta:get_inventory()
  169. if not inv:is_empty("matblock") then
  170. return false
  171. elseif not inv:is_empty("dye") then
  172. return false
  173. elseif not inv:is_empty("res") then
  174. return false
  175. end
  176. return true
  177. end,
  178. on_construct = function(pos)
  179. local meta = minetest.get_meta(pos)
  180. meta:set_string("formspec", "invsize[10,11;]"..
  181. "background[-0.15,-0.25;10.40,11.75;mycorners_background.png]"..
  182. "label[0,0;Corner Machine]"..
  183. "label[1.5,0.5;Material:]"..
  184. "list[current_name;matblock;1.5,1;1,1;]"..
  185. "label[3,0.5;Dye:]"..
  186. "list[current_name;dye;3,1;1,1;]"..
  187. "button[4.5,1;1,1;make;Make]"..
  188. "label[6,0.5;Output:]"..
  189. "list[current_name;res;6,1;1,1;]"..
  190. "label[1,2;Material can only be wood, stone or stone brick]"..
  191. "vertlabel[9.5,0.5;All dye colors are supported]"..
  192. "label[1.5,3;Material]"..
  193. "list[current_name;mat;1.5,3.5;1,1; ]"..
  194. "list[current_name;corner1;1.5,4.5;1,1; ]"..
  195. "list[current_name;corner2;2.5,3.5;1,1; ]"..
  196. "button[4.5,3.5;1,1;make2;Make]"..
  197. "label[6,3;Output:]"..
  198. "list[current_name;res2;6,3.5;1,1;]"..
  199. "label[1,5.5;Add a block to the top left and corner items in the other 2]"..
  200. "list[current_player;main;1,7;8,4;]")
  201. meta:set_string("infotext", "Corner Machine")
  202. local inv = meta:get_inventory()
  203. inv:set_size("matblock", 1)
  204. inv:set_size("dye", 1)
  205. inv:set_size("res", 1)
  206. inv:set_size("mat", 1)
  207. inv:set_size("corner1", 1)
  208. inv:set_size("corner2", 1)
  209. inv:set_size("res2", 1)
  210. end,
  211. on_receive_fields = function(pos, formname, fields, sender)
  212. local meta = minetest.get_meta(pos)
  213. local inv = meta:get_inventory()
  214. if fields["make"]
  215. then
  216. make_ok = 0
  217. anzahl = 4
  218. shape = "mycorners:corner_"
  219. if inv:is_empty("matblock") or
  220. inv:is_empty("dye") then
  221. return
  222. end
  223. local ingotstack1 = inv:get_stack("matblock", 1)
  224. local ingotstack2 = inv:get_stack("dye", 1)
  225. local resstack = inv:get_stack("res", 1)
  226. ----------------------------------------------------------------------------------
  227. --register nodes
  228. ----------------------------------------------------------------------------------
  229. for i in ipairs (dye_colors) do
  230. local dyecol = dye_colors[i][1]
  231. local color = dye_colors[i][2]
  232. if ingotstack1:get_name()=="default:wood" and
  233. ingotstack2:get_name()==dyecol then
  234. material = "wood_"..color
  235. make_ok = 1
  236. end
  237. if ingotstack1:get_name()=="default:stone" and
  238. ingotstack2:get_name()==dyecol then
  239. material = "stone_"..color
  240. make_ok = 1
  241. end
  242. if ingotstack1:get_name()=="default:stonebrick" and
  243. ingotstack2:get_name()==dyecol then
  244. material = "stonebrick_"..color
  245. make_ok = 1
  246. end
  247. end
  248. ----------------------------------------------------------------------
  249. if make_ok == 1 then
  250. local give = {}
  251. for i = 0, anzahl-1 do
  252. give[i+1]=inv:add_item("res",shape..material)
  253. end
  254. ingotstack1:take_item()
  255. inv:set_stack("matblock",1,ingotstack1)
  256. ingotstack2:take_item()
  257. inv:set_stack("dye",1,ingotstack2)
  258. end
  259. end
  260. ------------------------------------------------------------------------
  261. ------------------------------------------------------------------------
  262. if fields["make2"]
  263. then
  264. make_ok = 0
  265. anzahlz = 1
  266. shape2 = "mycorners:cornerblock_"
  267. if inv:is_empty("mat") or
  268. inv:is_empty("corner1") or
  269. inv:is_empty("corner2") then
  270. return
  271. end
  272. local ingotstack4 = inv:get_stack("mat", 1)
  273. local ingotstack5 = inv:get_stack("corner1", 1)
  274. local ingotstack6 = inv:get_stack("corner2", 1)
  275. local resstack2 = inv:get_stack("res2", 1)
  276. ----------------------------------------------------------------------------------
  277. --register nodes
  278. ----------------------------------------------------------------------------------
  279. for i in ipairs (nodes_of_corners) do
  280. local nodeitem = nodes_of_corners[i][1]
  281. local nodedesc = nodes_of_corners[i][2]
  282. for i in ipairs (corner_items) do
  283. local ctype = corner_items[i][1]
  284. if ingotstack4:get_name()== nodeitem and
  285. ingotstack5:get_name()=="mycorners:corner"..ctype and
  286. ingotstack6:get_name()=="mycorners:corner"..ctype then
  287. matr = nodedesc..ctype
  288. make_ok = 1
  289. end
  290. end
  291. end
  292. ----------------------------------------------------------------------
  293. if make_ok == 1 then
  294. local give = {}
  295. for i = 0, anzahlz-1 do
  296. give[i+1]=inv:add_item("res2",shape2..matr)
  297. end
  298. ingotstack4:take_item()
  299. inv:set_stack("mat",1,ingotstack4)
  300. ingotstack5:take_item()
  301. inv:set_stack("corner1",1,ingotstack5)
  302. ingotstack6:take_item()
  303. inv:set_stack("corner2",1,ingotstack6)
  304. end
  305. end
  306. end
  307. })
  308. --Craft
  309. minetest.register_craft({
  310. output = 'mycorners:machine_corner',
  311. recipe = {
  312. {'', '', ''},
  313. {'group:wood', 'default:steel_ingot', 'group:wood'},
  314. {'default:steelblock', "default:steelblock", 'default:steelblock"'},
  315. },
  316. })