tool.lua 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. return function(plg)
  2. minetest.register_tool("mesecons_fpga:programmer", {
  3. description = "FPGA Programmer",
  4. inventory_image = "jeija_fpga_programmer.png",
  5. stack_max = 1,
  6. on_place = function(itemstack, placer, pointed_thing)
  7. if pointed_thing.type ~= "node" then
  8. return itemstack
  9. end
  10. local pos = pointed_thing.under
  11. if minetest.get_node(pos).name:find("mesecons_fpga:fpga") ~= 1 then
  12. return itemstack
  13. end
  14. local meta = minetest.get_meta(pos)
  15. if meta:get_string("instr") == "//////////////" then
  16. minetest.chat_send_player(placer:get_player_name(), "This FPGA is unprogrammed.")
  17. minetest.sound_play("mesecons_fpga_fail", { pos = placer:get_pos(), gain = 0.1, max_hear_distance = 4 })
  18. return itemstack
  19. end
  20. itemstack:set_metadata(meta:get_string("instr"))
  21. minetest.chat_send_player(placer:get_player_name(), "FPGA gate configuration was successfully copied!")
  22. minetest.sound_play("mesecons_fpga_copy", { pos = placer:get_pos(), gain = 0.1, max_hear_distance = 4 })
  23. return itemstack
  24. end,
  25. on_use = function(itemstack, user, pointed_thing)
  26. if pointed_thing.type ~= "node" then
  27. return itemstack
  28. end
  29. local pos = pointed_thing.under
  30. if minetest.get_node(pos).name:find("mesecons_fpga:fpga") ~= 1 then
  31. return itemstack
  32. end
  33. local player_name = user:get_player_name()
  34. if minetest.is_protected(pos, player_name) then
  35. minetest.record_protection_violation(pos, player_name)
  36. return itemstack
  37. end
  38. local imeta = itemstack:get_metadata()
  39. if imeta == "" then
  40. minetest.chat_send_player(player_name, "Use shift+right-click to copy a gate configuration first.")
  41. minetest.sound_play("mesecons_fpga_fail", { pos = user:get_pos(), gain = 0.1, max_hear_distance = 4 })
  42. return itemstack
  43. end
  44. local meta = minetest.get_meta(pos)
  45. meta:set_string("instr", imeta)
  46. plg.update_meta(pos, imeta)
  47. minetest.chat_send_player(player_name, "Gate configuration was successfully written to FPGA!")
  48. minetest.sound_play("mesecons_fpga_write", { pos = user:get_pos(), gain = 0.1, max_hear_distance = 4 })
  49. return itemstack
  50. end
  51. })
  52. minetest.register_craft({
  53. output = "mesecons_fpga:programmer",
  54. recipe = {
  55. {'group:mesecon_conductor_craftable'},
  56. {'mesecons_materials:silicon'},
  57. }
  58. })
  59. end