/// <summary> Outputs all block changes by the given players. </summary> /// <remarks> You must lock using Locker.AccquireRead() **before** entering this method. </remarks> /// <returns> whether an entry before start time was reached. </returns> public bool FindChangesBy(int[] ids, DateTime start, DateTime end, out Vec3U16 dims, Action <BlockDBEntry> output) { int startDelta = ClampDelta(start.Subtract(Epoch)); int endDelta = ClampDelta(end.Subtract(Epoch)); dims = Dims; if (FindInMemoryBy(ids, startDelta, endDelta, output)) { return(true); } if (!File.Exists(FilePath)) { return(false); } using (Stream s = OpenRead()) { BlockDBFile format = BlockDBFile.ReadHeader(s, out dims); return(format.FindChangesBy(s, ids, startDelta, endDelta, output)); } }