local S = minetest.get_translator("mcl_maps") -- Turn empty map into filled map by rightclick local make_filled_map = function(itemstack, placer, pointed_thing) local new_map = ItemStack("mcl_maps:filled_map") itemstack:take_item() if itemstack:is_empty() then return new_map else local inv = placer:get_inventory() if inv:room_for_item("main", new_map) then inv:add_item("main", new_map) else minetest.add_item(placer:get_pos(), new_map) end return itemstack end end minetest.register_craftitem("mcl_maps:empty_map", { description = S("Empty Map"), _doc_items_longdesc = S("Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used."), _doc_items_usagehelp = S("Rightclick to start using the map (which can't be stacked anymore)."), inventory_image = "mcl_maps_map_empty.png", groups = { not_in_creative_inventory = 1 }, on_place = make_filled_map, on_secondary_use = make_filled_map, stack_max = 64, }) -- Enables minimap if carried in hotbar. -- If this item is NOT in the hotbar, the minimap is unavailable -- Note: This is not at all like Minecraft right now. Minetest's minimap is pretty overpowered, it -- has a very greatly zoomed-out version and even a radar mode minetest.register_craftitem("mcl_maps:filled_map", { description = S("Map"), _doc_items_longdesc = S("Maps show your surroundings as you explore the world."), _doc_items_usagehelp = S("Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).").."\n".. S("In Creative Mode, you don't need this item; the minimap is always available."), groups = { tool = 1 }, inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", stack_max = 1, }) minetest.register_craft({ output = "mcl_maps:filled_map", recipe = { { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper" }, { "mcl_core:paper", "group:compass", "mcl_core:paper" }, { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper" }, } }) local function has_item_in_hotbar(player, item) -- Requirement: player carries the tool in the hotbar local inv = player:get_inventory() local hotbar = player:hud_get_hotbar_itemcount() for i=1, hotbar do if inv:get_stack("main", i):get_name() == item then return true end end return false end -- Checks if player is still allowed to display the minimap local function update_minimap(player) local creative = minetest.settings:get_bool("creative_mode") if creative then player:hud_set_flags({minimap=true, minimap_radar = true}) else if has_item_in_hotbar(player, "mcl_maps:filled_map") then player:hud_set_flags({minimap = true, minimap_radar = false}) else player:hud_set_flags({minimap = false, minimap_radar = false}) end end end minetest.register_on_joinplayer(function(player) update_minimap(player) end) local updatetimer = 0 if not minetest.settings:get_bool("creative_mode") then minetest.register_globalstep(function(dtime) updatetimer = updatetimer + dtime if updatetimer > 0.1 then local players = minetest.get_connected_players() for i=1, #players do update_minimap(players[i]) end updatetimer = updatetimer - dtime end end) end