From 5b93ee5e40235c70fe0d84cce0271718af6fdf93 Mon Sep 17 00:00:00 2001 From: epCode Date: Tue, 13 Apr 2021 17:07:28 -0700 Subject: [PATCH] Improve rocket --- mods/ITEMS/mcl_fireworks/register.lua | 58 +++++++++++++++++---------- mods/PLAYER/mcl_playerplus/init.lua | 14 +++++-- 2 files changed, 47 insertions(+), 25 deletions(-) diff --git a/mods/ITEMS/mcl_fireworks/register.lua b/mods/ITEMS/mcl_fireworks/register.lua index cb8d89e58e..cce36042ab 100644 --- a/mods/ITEMS/mcl_fireworks/register.lua +++ b/mods/ITEMS/mcl_fireworks/register.lua @@ -1,5 +1,7 @@ local S = minetest.get_translator("mcl_fireworks") +player_rocketing = {} + local help = S("Flight Duration:") local description = S("Firework Rocket") local rocket_sound = function() @@ -12,13 +14,17 @@ minetest.register_craftitem("mcl_fireworks:rocket_1", { inventory_image = "mcl_fireworks_rocket.png", stack_max = 64, on_use = function(itemstack, user, pointed_thing) - itemstack:take_item() - local torso = user:get_inventory():get_stack("armor", 3) - if torso and torso:get_name() == "mcl_armor:elytra" then - user:add_player_velocity(vector.multiply(user:get_look_dir(), 20)) - rocket_sound() - end - return itemstack + local torso = user:get_inventory():get_stack("armor", 3) + if torso and torso:get_name() == "mcl_armor:elytra" and player_rocketing[user] ~= true then + player_rocketing[user] = true + minetest.after(2.2, function() + player_rocketing[user] = false + end) + itemstack:take_item() + --user:add_player_velocity(vector.multiply(user:get_look_dir(), 20)) + rocket_sound() + end + return itemstack end, }) @@ -28,13 +34,17 @@ minetest.register_craftitem("mcl_fireworks:rocket_2", { inventory_image = "mcl_fireworks_rocket.png", stack_max = 64, on_use = function(itemstack, user, pointed_thing) - itemstack:take_item() - local torso = user:get_inventory():get_stack("armor", 3) - if torso and torso:get_name() == "mcl_armor:elytra" then - user:add_player_velocity(vector.multiply(user:get_look_dir(), 30)) - rocket_sound() - end - return itemstack + local torso = user:get_inventory():get_stack("armor", 3) + if torso and torso:get_name() == "mcl_armor:elytra" and player_rocketing[user] ~= true then + player_rocketing[user] = true + minetest.after(4.5, function() + player_rocketing[user] = false + end) + itemstack:take_item() + --user:add_player_velocity(vector.multiply(user:get_look_dir(), 20)) + rocket_sound() + end + return itemstack end, }) @@ -43,13 +53,17 @@ minetest.register_craftitem("mcl_fireworks:rocket_3", { _tt_help = help.." 3", inventory_image = "mcl_fireworks_rocket.png", stack_max = 64, - on_use = function(itemstack, user, pointed_thing, player) - itemstack:take_item() - local torso = user:get_inventory():get_stack("armor", 3) - if torso and torso:get_name() == "mcl_armor:elytra" then - user:add_player_velocity(vector.multiply(user:get_look_dir(), 40)) - rocket_sound() - end - return itemstack + on_use = function(itemstack, user, pointed_thing) + local torso = user:get_inventory():get_stack("armor", 3) + if torso and torso:get_name() == "mcl_armor:elytra" and player_rocketing[user] ~= true then + player_rocketing[user] = true + minetest.after(6, function() + player_rocketing[user] = false + end) + itemstack:take_item() + --user:add_player_velocity(vector.multiply(user:get_look_dir(), 20)) + rocket_sound() + end + return itemstack end, }) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 3aa93a301d..f4dceb9b4a 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -1,6 +1,6 @@ local S = minetest.get_translator("mcl_playerplus") -local elytra = {} +elytra = {} local node_stand_return = ":air" local get_connected_players = minetest.get_connected_players @@ -200,6 +200,16 @@ minetest.register_globalstep(function(dtime) minetest.log("action", "somehow player got of loaded areas") end + local chestplate = player:get_inventory():get_stack("armor", 3) + + if player_rocketing[player] and player_rocketing[player] == true and chestplate:get_name() == "mcl_armor:elytra" then + if math.abs(player_velocity.x) + math.abs(player_velocity.y) + math.abs(player_velocity.z) < 40 then + player:add_player_velocity(vector.multiply(player:get_look_dir(), 4)) + elytra[player] = true + end + end + + controls.register_on_press(function(player, key) if key~="jump" and key~="RMB" then return end if key=="jump" then @@ -214,8 +224,6 @@ minetest.register_globalstep(function(dtime) end end) - local chestplate = player:get_inventory():get_stack("armor", 3) - if elytra[player] == true and node_stand_return ~= "air" or elytra[player] == true and player:get_inventory():get_stack("armor", 3):get_name() ~= "mcl_armor:elytra" or player:get_attach() ~= nil then elytra[player] = false end