items.lua 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. minetest.register_node("experimental:callback_node", {
  2. description = "Callback Test Node (construct/destruct/timer)",
  3. tiles = {"experimental_callback_node.png"},
  4. groups = {dig_immediate=3},
  5. -- This was known to cause a bug in minetest.item_place_node() when used
  6. -- via minetest.place_node(), causing a placer with no position
  7. paramtype2 = "facedir",
  8. drop = "",
  9. on_construct = function(pos)
  10. experimental.print_to_everything("experimental:callback_node:on_construct("..minetest.pos_to_string(pos)..")")
  11. local meta = minetest.get_meta(pos)
  12. meta:set_string("mine", "test")
  13. local timer = minetest.get_node_timer(pos)
  14. timer:start(4, 3)
  15. end,
  16. after_place_node = function(pos, placer)
  17. experimental.print_to_everything("experimental:callback_node:after_place_node("..minetest.pos_to_string(pos)..")")
  18. local meta = minetest.get_meta(pos)
  19. if meta:get_string("mine") == "test" then
  20. experimental.print_to_everything("correct metadata found")
  21. else
  22. experimental.print_to_everything("incorrect metadata found")
  23. end
  24. end,
  25. on_destruct = function(pos)
  26. experimental.print_to_everything("experimental:callback_node:on_destruct("..minetest.pos_to_string(pos)..")")
  27. end,
  28. after_destruct = function(pos)
  29. experimental.print_to_everything("experimental:callback_node:after_destruct("..minetest.pos_to_string(pos)..")")
  30. end,
  31. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  32. experimental.print_to_everything("experimental:callback_node:after_dig_node("..minetest.pos_to_string(pos)..")")
  33. end,
  34. on_timer = function(pos, elapsed)
  35. experimental.print_to_everything("on_timer(): elapsed="..dump(elapsed))
  36. return true
  37. end,
  38. })
  39. minetest.register_tool("experimental:privatizer", {
  40. description = "Node Meta Privatizer",
  41. inventory_image = "experimental_tester_tool_1.png",
  42. groups = { testtool = 1, disable_repair = 1 },
  43. on_use = function(itemstack, user, pointed_thing)
  44. if pointed_thing.type == "node" then
  45. local node = minetest.get_node(pointed_thing.under)
  46. if node.name == "chest:chest" then
  47. local p = pointed_thing.under
  48. minetest.log("action", "Privatizer used at "..minetest.pos_to_string(p))
  49. minetest.get_meta(p):mark_as_private({"infotext", "formspec"})
  50. if user and user:is_player() then
  51. minetest.chat_send_player(user:get_player_name(), "Chest metadata (infotext, formspec) set private!")
  52. end
  53. return
  54. end
  55. end
  56. if user and user:is_player() then
  57. minetest.chat_send_player(user:get_player_name(), "Privatizer can only be used on chest!")
  58. end
  59. end,
  60. })
  61. minetest.register_tool("experimental:particle_spawner", {
  62. description = "Particle Spawner",
  63. inventory_image = "experimental_tester_tool_1.png^[invert:g",
  64. groups = { testtool = 1, disable_repair = 1 },
  65. on_use = function(itemstack, user, pointed_thing)
  66. local pos = minetest.get_pointed_thing_position(pointed_thing, true)
  67. if pos == nil then
  68. if user then
  69. pos = user:get_pos()
  70. end
  71. end
  72. pos = vector.add(pos, {x=0, y=0.5, z=0})
  73. local tex, anim
  74. if math.random(0, 1) == 0 then
  75. tex = "experimental_particle_sheet.png"
  76. anim = {type="sheet_2d", frames_w=3, frames_h=2, frame_length=0.5}
  77. else
  78. tex = "experimental_particle_vertical.png"
  79. anim = {type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
  80. end
  81. minetest.add_particle({
  82. pos = pos,
  83. velocity = {x=0, y=0, z=0},
  84. acceleration = {x=0, y=0.04, z=0},
  85. expirationtime = 6,
  86. collisiondetection = true,
  87. texture = tex,
  88. animation = anim,
  89. size = 4,
  90. glow = math.random(0, 5),
  91. })
  92. end,
  93. })