forked from VoxeLibre/VoxeLibre
Fix handheld maps not displaying in Minetest 5.5.0
The function dynamic_add_media() was changed in incompatible ways in several minor versions of Minetest, breaking the display of handheld maps in Minetest 5.5.0. This patch makes handheld maps display there. The function was blocking with one argument in Minetest 5.3. It was also blocking in Minetest 5.4, but took an additional argument for a function to execute once the media had been received. Calling dynamic_add_media() with a single argument had been deprecated; a function that did nothing was provided in mcl_maps to satisfy the changed argument requirements. In Minetest 5.5, dynamic_add_media() was changed to non-blocking. This introduced a race condition in mcl_maps, where a client often tried to display a map before it had received the map texture from the server. Opening an issue on the Minetest issue tracker led to it being closed in about 20 minutes: <https://github.com/minetest/minetest/issues/11997>
This commit is contained in:
parent
3cfa41de6d
commit
6e3f22c1ca
|
@ -147,12 +147,24 @@ function mcl_maps.load_map(id)
|
||||||
local texture = "mcl_maps_map_texture_" .. id .. ".tga"
|
local texture = "mcl_maps_map_texture_" .. id .. ".tga"
|
||||||
|
|
||||||
if not loaded_maps[id] then
|
if not loaded_maps[id] then
|
||||||
|
if not minetest.features.dynamic_add_media_table then
|
||||||
|
-- minetest.dynamic_add_media() blocks in
|
||||||
|
-- Minetest 5.3 and 5.4 until media loads
|
||||||
loaded_maps[id] = true
|
loaded_maps[id] = true
|
||||||
dynamic_add_media(map_textures_path .. texture, function() end)
|
dynamic_add_media(map_textures_path .. texture, function() end)
|
||||||
|
else
|
||||||
|
-- minetest.dynamic_add_media() never blocks
|
||||||
|
-- in Minetest 5.5, callback runs after load
|
||||||
|
dynamic_add_media(map_textures_path .. texture, function()
|
||||||
|
loaded_maps[id] = true
|
||||||
|
end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if loaded_maps[id] then
|
||||||
return texture
|
return texture
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function mcl_maps.load_map_item(itemstack)
|
function mcl_maps.load_map_item(itemstack)
|
||||||
return mcl_maps.load_map(itemstack:get_meta():get_string("mcl_maps:id"))
|
return mcl_maps.load_map(itemstack:get_meta():get_string("mcl_maps:id"))
|
||||||
|
|
Loading…
Reference in New Issue