diff --git a/init.lua b/init.lua index f2e4aa9..8e0833e 100644 --- a/init.lua +++ b/init.lua @@ -13,20 +13,12 @@ minetest.register_craftitem("enderpearl:ender_pearl", { stack_max = 16, on_use = function(_, player, pointed_thing) - local ender_pearl = minetest.add_entity(vector.add({x=0, y=1.5, z=0}, player:get_pos()), "enderpearl:thrown_ender_pearl", player:get_player_name()) - local entity = ender_pearl:get_luaentity() - local yaw = player:get_look_horizontal() - local pitch = player:get_look_vertical() - local dir = player:get_look_dir() + local throw_starting_pos = vector.add({x=0, y=1.5, z=0}, player:get_pos()) + local ender_pearl = minetest.add_entity(throw_starting_pos, "enderpearl:thrown_ender_pearl", player:get_player_name()) - ender_pearl:set_rotation({x = -pitch, y = yaw, z = 0}) - ender_pearl:set_velocity({ - x=(dir.x * entity.initial_properties.speed), - y=(dir.y * entity.initial_properties.speed), - z=(dir.z * entity.initial_properties.speed), - }) - ender_pearl:set_acceleration({x=dir.x*-4, y=-entity.initial_properties.gravity, z=dir.z*-4}) minetest.after(0, function() player:get_inventory():remove_item("main", "enderpearl:ender_pearl") end) + + minetest.sound_play("enderpearl_throw", {max_hear_distance = 10, pos = player:get_pos()}) end, }) @@ -65,7 +57,7 @@ function thrown_ender_pearl:on_step(dtime, moveresult) if collided_with_node then local player = minetest.get_player_by_name(self.player_name) - if player == nil then + if not player then self.object:remove() return elseif player:get_meta():get_string("ep_can_teleport") == "false" then @@ -76,6 +68,7 @@ function thrown_ender_pearl:on_step(dtime, moveresult) player:add_player_velocity(vector.multiply(player:get_player_velocity(), -1)) player:set_pos(vector.add(self.object:get_pos(), {x = 0, y = 1, z = 0})) player:set_hp(player:get_hp()-self.initial_properties.damage, "enderpearl") + minetest.sound_play("enderpearl_teleport", {max_hear_distance = 10, pos = player:get_pos()}) for i=1, #callbacks do local node = minetest.get_node(moveresult.collisions[1].node_pos) @@ -89,11 +82,25 @@ end function thrown_ender_pearl:on_activate(staticdata) - if staticdata == nil or minetest.get_player_by_name(staticdata) == nil then + if not staticdata or not minetest.get_player_by_name(staticdata) then self.object:remove() + return end self.player_name = staticdata + local player = minetest.get_player_by_name(staticdata) + local yaw = player:get_look_horizontal() + local pitch = player:get_look_vertical() + local dir = player:get_look_dir() + + self.object:set_rotation({x = -pitch, y = yaw, z = 0}) + self.object:set_velocity({ + x=(dir.x * self.initial_properties.speed), + y=(dir.y * self.initial_properties.speed), + z=(dir.z * self.initial_properties.speed), + }) + self.object:set_acceleration({x=dir.x*-4, y=-self.initial_properties.gravity, z=dir.z*-4}) + minetest.after(self.initial_properties.lifetime, function() self.object:remove() end) end diff --git a/locale/template.txt b/locale/template.txt index 7d65c3e..7a454f3 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -1,3 +1,3 @@ -# textdomain: enderpearl +#textdomain: enderpearl Left click to throw it@nIt will teleport you on the node it hit making you 2 damage@n(it won't work if you launch it in an unloaded world area)= diff --git a/sounds/enderpearl_teleport.ogg b/sounds/enderpearl_teleport.ogg new file mode 100644 index 0000000..97c9fc3 Binary files /dev/null and b/sounds/enderpearl_teleport.ogg differ diff --git a/sounds/enderpearl_throw.ogg b/sounds/enderpearl_throw.ogg new file mode 100644 index 0000000..5139096 Binary files /dev/null and b/sounds/enderpearl_throw.ogg differ