From d920441a015d19c58583ed643e46ab985fa0a4f6 Mon Sep 17 00:00:00 2001 From: ancientmarinerdev Date: Mon, 8 May 2023 21:51:13 +0100 Subject: [PATCH] Reduce network activity for elytra flying rocket particles --- mods/CORE/mcl_util/init.lua | 12 +++++++++++- mods/PLAYER/mcl_playerplus/init.lua | 26 +++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/mods/CORE/mcl_util/init.lua b/mods/CORE/mcl_util/init.lua index 2b3e0918a..5872ce742 100644 --- a/mods/CORE/mcl_util/init.lua +++ b/mods/CORE/mcl_util/init.lua @@ -34,8 +34,10 @@ function mcl_util.mcl_log(message, module, bypass_default_logger) end end +local player_timers = {} + -- This is a dtime timer than can be used in on_step functions so it works every x seconds --- self - Object you want to store timer data on. E.g. mob or a minecart +-- self - Object you want to store timer data on. E.g. mob or a minecart, or player_name -- dtime - The time since last run of on_step, should be passed in to function -- timer_name - This is the name of the timer and also the key to store the data. No spaces + lowercase. -- threshold - The time before it returns successful. 0.2 if you want to run it 5 times a second. @@ -43,6 +45,14 @@ function mcl_util.check_dtime_timer(self, dtime, timer_name, threshold) if not self or not threshold or not dtime then return end if not timer_name or timer_name == "" then return end + if type(self) == "string" then + local player_name = self + if not player_timers[player_name] then + player_timers[player_name] = {} + end + self = player_timers[player_name] + end + if not self._timers then self._timers = {} end diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 1de839456..d3235daa8 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -272,17 +272,21 @@ minetest.register_globalstep(function(dtime) if vector.length(player_velocity) < 40 then -- player:add_velocity(vector.multiply(player:get_look_dir(), 4)) speed_mult = elytra_vars.rocket_speed - add_particle({ - pos = fly_pos, - velocity = {x = 0, y = 0, z = 0}, - acceleration = {x = 0, y = 0, z = 0}, - expirationtime = math.random(0.3, 0.5), - size = math.random(1, 2), - collisiondetection = false, - vertical = false, - texture = "mcl_particles_bonemeal.png^[colorize:#bc7a57:127", - glow = 5, - }) + + if mcl_util.check_dtime_timer(name, dtime, "ely_rocket_particle_spawn", 0.3) then + minetest.log("pspawn") + add_particle({ + pos = fly_pos, + velocity = vector.zero(), + acceleration = vector.zero(), + expirationtime = math.random(0.3, 0.5), + size = math.random(1, 2), + collisiondetection = false, + vertical = false, + texture = "mcl_particles_bonemeal.png^[colorize:#bc7a57:127", + glow = 5, + }) + end end end