diff --git a/init.lua b/init.lua index 79aaeff..2d3b5db 100644 --- a/init.lua +++ b/init.lua @@ -361,17 +361,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local label = fields.label set_compass_meta_label(meta, label) - - local success = player:set_wielded_item(compass_item) - if not success then - -- no idea why this can happen - minetest.log("error","[MOD] waypoint_compass: " .. - player:get_player_name() .. - " Failed to swap compass after editing it") + + -- Prevent overwriting random item if user switched before + -- formspec appeared. FIXME can still change another compass. + local current_item = player:get_wielded_item() + if current_item:get_name() == "waypoint_compass:compass" then + local success = player:set_wielded_item(compass_item) + if not success then + -- no idea why this can happen + minetest.log("error","[MOD] waypoint_compass: " .. + player:get_player_name() .. + " Failed to swap compass after editing it") + end end -- assume dialog is closed and reset context compass_dialog_context[player:get_player_name()] = nil - update_hud_waypoint(player, compass_item, 'force') + update_hud_waypoint(player, current_item, 'force') end end)