init.lua 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. minetest.register_craftitem("orb_of_wind:orb_of_wind", {
  2. description = "Orb of wind\nMana: 10",
  3. inventory_image = "orb_of_wind_orb.png",
  4. on_use = function(itemstack, player, pointed_thing)
  5. local name = player:get_player_name()
  6. local players_mana = hbmana.get(name)
  7. if players_mana >= 10 then
  8. hbmana.set(name, players_mana - 10)
  9. local player_pos = player:get_pos()
  10. local pointed_pos = pointed_thing.under
  11. local dir = player:get_look_dir()
  12. obj = minetest.add_entity({
  13. x = player_pos.x,
  14. y = player_pos.y + 1.5,
  15. z = player_pos.z
  16. }, "orb_of_wind:wind_ball")
  17. obj:setvelocity({
  18. x = dir.x * 15,
  19. y = dir.y * 15,
  20. z = dir.z * 15
  21. })
  22. obj:get_luaentity()._owner = name
  23. end
  24. end
  25. })
  26. minetest.register_craft({
  27. output = "orb_of_wind:orb_of_wind",
  28. recipe = {
  29. {"", "default:glass", ""},
  30. {"default:glass", "gems_quartz:quartz", "default:glass"},
  31. {"", "default:glass", ""},
  32. }
  33. })
  34. minetest.register_entity("orb_of_wind:wind_ball", {
  35. physical = false,
  36. visual = "sprite",
  37. visual_size = {x=0.1, y=0.1},
  38. textures = {"orb_of_wind_particle.png"},
  39. collisionbox = {-0.1,-0.1,-0.1,0.1,0.1,0.1},
  40. pointable = false,
  41. _owner = "",
  42. on_step = function(self, dtime)
  43. local pos = self.object:get_pos()
  44. if minetest.get_node(pos).name ~= "air" then
  45. self.object:remove()
  46. end
  47. minetest.add_particlespawner({
  48. amount = 30,
  49. time = 0.10,
  50. minpos = {
  51. x = pos.x - 0.1,
  52. y = pos.y - 0.1,
  53. z = pos.z - 0.1
  54. },
  55. maxpos = {
  56. x = pos.x + 0.1,
  57. y = pos.y + 0.1,
  58. z = pos.z + 0.1
  59. },
  60. minexptime = 0.1,
  61. maxexptime = 0.2,
  62. minsize = 0.50,
  63. maxsize = 0.50,
  64. collisiondetection = false,
  65. vertical = false,
  66. texture = "orb_of_wind_particle.png",
  67. })
  68. local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
  69. for k, obj in pairs(objs) do
  70. if obj:get_luaentity() ~= nil then
  71. if obj:get_luaentity().name ~= "orb_of_wind:wind_ball" and obj:get_luaentity().name ~= "__builtin:item" then
  72. obj:punch(self.object, 1.0, {
  73. full_punch_interval = 1.0,
  74. damage_groups = {fleshy = 1},
  75. }, nil)
  76. self.object:remove()
  77. end
  78. elseif obj:is_player() and obj:get_player_name() ~= self._owner then
  79. obj:punch(self.object, 1.0, {
  80. full_punch_interval = 1.0,
  81. damage_groups = {fleshy = 1},
  82. }, nil)
  83. self.object:remove()
  84. end
  85. end
  86. end
  87. })