System.out.println ("Couldn't acquire lock!");
    private void updateTrainPosition(TrainModel tm) {	final PathLength pl = new PathLength();	GameTime now = (GameTime) world.get(ITEM.TIME, Player.AUTHORITATIVE);	TrainMotionModel tmm = tm.getTrainMotionModel();	/* work out where we should be */	/* speed in tiles per BigTick */	float speed = ((float) ((EngineType) world.get(KEY.ENGINE_TYPES,		    tm.getEngineType(), Player.AUTHORITATIVE)).getMaxSpeed()) /			EngineType.TILE_HOURS_PER_MILE_BIGTICKS;	/* speed in deltas per tick */	speed *= TrackTile.DELTAS_PER_TILE / GameTime.TICKS_PER_BIG_TICK;	int ticksSinceLastSync = now.getTime() -	    tmm.getTimeOfLastSync().getTime() - tmm.getBlockedFor();	pl.setLength(tmm.getPathToDestination().getActualLength());	pl.add(tmm.getPathTraversedSinceLastSync().getActualLength());	int distanceToTarget = (int) (pl.getLength() - speed *	    ticksSinceLastSync);	if (distanceToTarget < 0)	    distanceToTarget = 0;	/* can happen due to rounding */	if (distanceToTarget > tmm.getPathToDestination().getLength())	    return;	assert distanceToTarget <= tmm.getPathToDestination().getLength();	TrainPath tp =	    tmm.getPathToDestination().truncateTail(distanceToTarget);	if (! tmm.isBlocked())	   tm.releaseAllLocks(world);	TrainPath pos = tm.getPosition();	TrainPath removed = pos.moveHeadTo(tp);	if (! tm.acquireAllLocks(world)) {	    System.out.println ("Couldn't acquire lock!");	    tmm.getPathToDestination().append(tp);	    pos.moveTailTo(removed);	    tmm.block();	    return;	}	/* increment the pathTraversedSinceLastSync */	tmm.getPathTraversedSinceLastSync().prepend(removed);    }