From 1127231ca9333497d70debc07c9ae0293c42be6f Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 27 May 2022 15:06:25 +0200 Subject: [PATCH] Fix crash on non existent xp-hud due to gamemode --- mods/HUD/mcl_experience/init.lua | 60 ++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/mods/HUD/mcl_experience/init.lua b/mods/HUD/mcl_experience/init.lua index aea805fa2..6ead36687 100644 --- a/mods/HUD/mcl_experience/init.lua +++ b/mods/HUD/mcl_experience/init.lua @@ -156,33 +156,7 @@ function mcl_experience.throw_xp(pos, total_xp) end end -function mcl_experience.update(player) - local xp = mcl_experience.get_xp(player) - local cache = caches[player] - - cache.level = xp_to_level(xp) - - if not minetest.is_creative_enabled(player:get_player_name()) then - player:hud_change(hud_bars[player], "text", "mcl_experience_bar_background.png^[lowpart:" - .. math.floor(math.floor(xp_to_bar(xp, cache.level) * 18) / 18 * 100) - .. ":mcl_experience_bar.png^[transformR270" - ) - - if cache.level == 0 then - player:hud_change(hud_levels[player], "text", "") - else - player:hud_change(hud_levels[player], "text", tostring(cache.level)) - end - end -end - -function mcl_experience.register_on_add_xp(func, priority) - table.insert(mcl_experience.on_add_xp, {func = func, priority = priority or 0}) -end - --- callbacks - -minetest.register_on_joinplayer(function(player) +local function setup_hud(player) caches[player] = { last_time = get_time(), } @@ -205,7 +179,39 @@ minetest.register_on_joinplayer(function(player) z_index = 12, }) end +end +function mcl_experience.update(player) + local xp = mcl_experience.get_xp(player) + local cache = caches[player] + + cache.level = xp_to_level(xp) + + if not minetest.is_creative_enabled(player:get_player_name()) then + if not hud_bars[player] then + setup_hud(player) + end + player:hud_change(hud_bars[player], "text", "mcl_experience_bar_background.png^[lowpart:" + .. math.floor(math.floor(xp_to_bar(xp, cache.level) * 18) / 18 * 100) + .. ":mcl_experience_bar.png^[transformR270" + ) + + if cache.level == 0 then + player:hud_change(hud_levels[player], "text", "") + else + player:hud_change(hud_levels[player], "text", tostring(cache.level)) + end + end +end + +function mcl_experience.register_on_add_xp(func, priority) + table.insert(mcl_experience.on_add_xp, {func = func, priority = priority or 0}) +end + +-- callbacks + +minetest.register_on_joinplayer(function(player) + setup_hud(player) mcl_experience.update(player) end)